github.com/google/cadvisor@v0.49.1/utils/sysfs/fakesysfs/fake.go (about)

     1  // Copyright 2014 Google Inc. All Rights Reserved.
     2  //
     3  // Licensed under the Apache License, Version 2.0 (the "License");
     4  // you may not use this file except in compliance with the License.
     5  // You may obtain a copy of the License at
     6  //
     7  //     http://www.apache.org/licenses/LICENSE-2.0
     8  //
     9  // Unless required by applicable law or agreed to in writing, software
    10  // distributed under the License is distributed on an "AS IS" BASIS,
    11  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    12  // See the License for the specific language governing permissions and
    13  // limitations under the License.
    14  
    15  package fakesysfs
    16  
    17  import (
    18  	"fmt"
    19  	"os"
    20  	"time"
    21  
    22  	"github.com/google/cadvisor/utils/sysfs"
    23  )
    24  
    25  // If we extend sysfs to support more interfaces, it might be worth making this a mock instead of a fake.
    26  type FileInfo struct {
    27  	EntryName string
    28  }
    29  
    30  func (i *FileInfo) Name() string {
    31  	return i.EntryName
    32  }
    33  
    34  func (i *FileInfo) Size() int64 {
    35  	return 1234567
    36  }
    37  
    38  func (i *FileInfo) Mode() os.FileMode {
    39  	return 0
    40  }
    41  
    42  func (i *FileInfo) ModTime() time.Time {
    43  	return time.Time{}
    44  }
    45  
    46  func (i *FileInfo) IsDir() bool {
    47  	return true
    48  }
    49  
    50  func (i *FileInfo) Sys() interface{} {
    51  	return nil
    52  }
    53  
    54  type FakeSysFs struct {
    55  	info  FileInfo
    56  	cache sysfs.CacheInfo
    57  
    58  	nodesPaths  []string
    59  	nodePathErr error
    60  
    61  	cpusPaths  map[string][]string
    62  	cpuPathErr error
    63  
    64  	coreThread map[string]string
    65  	coreIDErr  map[string]error
    66  
    67  	physicalPackageIDs   map[string]string
    68  	physicalPackageIDErr map[string]error
    69  
    70  	memTotal string
    71  	memErr   error
    72  
    73  	hugePages    []os.FileInfo
    74  	hugePagesErr error
    75  
    76  	hugePagesNr    map[string]string
    77  	hugePagesNrErr error
    78  
    79  	distances    map[string]string
    80  	distancesErr error
    81  
    82  	onlineCPUs map[string]interface{}
    83  }
    84  
    85  func (fs *FakeSysFs) GetNodesPaths() ([]string, error) {
    86  	return fs.nodesPaths, fs.nodePathErr
    87  }
    88  
    89  func (fs *FakeSysFs) GetCPUsPaths(cpusPath string) ([]string, error) {
    90  	return fs.cpusPaths[cpusPath], fs.cpuPathErr
    91  }
    92  
    93  func (fs *FakeSysFs) GetCoreID(coreIDPath string) (string, error) {
    94  	return fs.coreThread[coreIDPath], fs.coreIDErr[coreIDPath]
    95  }
    96  
    97  func (fs *FakeSysFs) GetCPUPhysicalPackageID(cpuPath string) (string, error) {
    98  	return fs.physicalPackageIDs[cpuPath], fs.physicalPackageIDErr[cpuPath]
    99  }
   100  
   101  func (fs *FakeSysFs) GetMemInfo(nodePath string) (string, error) {
   102  	return fs.memTotal, fs.memErr
   103  }
   104  
   105  func (fs *FakeSysFs) GetHugePagesInfo(hugepagesDirectory string) ([]os.FileInfo, error) {
   106  	return fs.hugePages, fs.hugePagesErr
   107  }
   108  
   109  func (fs *FakeSysFs) GetHugePagesNr(hugepagesDirectory string, hugePageName string) (string, error) {
   110  	hugePageFile := fmt.Sprintf("%s%s/%s", hugepagesDirectory, hugePageName, sysfs.HugePagesNrFile)
   111  	return fs.hugePagesNr[hugePageFile], fs.hugePagesNrErr
   112  }
   113  
   114  func (fs *FakeSysFs) GetBlockDevices() ([]os.FileInfo, error) {
   115  	fs.info.EntryName = "sda"
   116  	return []os.FileInfo{&fs.info}, nil
   117  }
   118  
   119  func (fs *FakeSysFs) GetBlockDeviceSize(name string) (string, error) {
   120  	return "1234567", nil
   121  }
   122  
   123  func (fs *FakeSysFs) GetBlockDeviceScheduler(name string) (string, error) {
   124  	return "noop deadline [cfq]", nil
   125  }
   126  
   127  func (fs *FakeSysFs) GetBlockDeviceNumbers(name string) (string, error) {
   128  	return "8:0\n", nil
   129  }
   130  
   131  func (fs *FakeSysFs) IsBlockDeviceHidden(name string) (bool, error) {
   132  	return false, nil
   133  }
   134  
   135  func (fs *FakeSysFs) GetNetworkDevices() ([]os.FileInfo, error) {
   136  	return []os.FileInfo{&fs.info}, nil
   137  }
   138  
   139  func (fs *FakeSysFs) GetNetworkAddress(name string) (string, error) {
   140  	return "42:01:02:03:04:f4\n", nil
   141  }
   142  
   143  func (fs *FakeSysFs) GetNetworkMtu(name string) (string, error) {
   144  	return "1024\n", nil
   145  }
   146  
   147  func (fs *FakeSysFs) GetNetworkSpeed(name string) (string, error) {
   148  	return "1000\n", nil
   149  }
   150  
   151  func (fs *FakeSysFs) GetNetworkStatValue(name string, stat string) (uint64, error) {
   152  	return 1024, nil
   153  }
   154  
   155  func (fs *FakeSysFs) GetCaches(id int) ([]os.FileInfo, error) {
   156  	fs.info.EntryName = "index0"
   157  	return []os.FileInfo{&fs.info}, nil
   158  }
   159  
   160  func (fs *FakeSysFs) GetCacheInfo(cpu int, cache string) (sysfs.CacheInfo, error) {
   161  	return fs.cache, nil
   162  }
   163  
   164  func (fs *FakeSysFs) SetCacheInfo(cache sysfs.CacheInfo) {
   165  	fs.cache = cache
   166  }
   167  
   168  func (fs *FakeSysFs) SetNodesPaths(paths []string, err error) {
   169  	fs.nodesPaths = paths
   170  	fs.nodePathErr = err
   171  }
   172  
   173  func (fs *FakeSysFs) SetCPUsPaths(paths map[string][]string, err error) {
   174  	fs.cpusPaths = paths
   175  	fs.cpuPathErr = err
   176  }
   177  
   178  func (fs *FakeSysFs) SetCoreThreads(coreThread map[string]string, coreThreadErrors map[string]error) {
   179  	fs.coreThread = coreThread
   180  	fs.coreIDErr = coreThreadErrors
   181  }
   182  
   183  func (fs *FakeSysFs) SetPhysicalPackageIDs(physicalPackageIDs map[string]string, physicalPackageIDErrors map[string]error) {
   184  	fs.physicalPackageIDs = physicalPackageIDs
   185  	fs.physicalPackageIDErr = physicalPackageIDErrors
   186  }
   187  
   188  func (fs *FakeSysFs) SetMemory(memTotal string, err error) {
   189  	fs.memTotal = memTotal
   190  	fs.memErr = err
   191  }
   192  
   193  func (fs *FakeSysFs) SetHugePages(hugePages []os.FileInfo, err error) {
   194  	fs.hugePages = hugePages
   195  	fs.hugePagesErr = err
   196  }
   197  
   198  func (fs *FakeSysFs) SetHugePagesNr(hugePagesNr map[string]string, err error) {
   199  	fs.hugePagesNr = hugePagesNr
   200  	fs.hugePagesNrErr = err
   201  }
   202  
   203  func (fs *FakeSysFs) SetEntryName(name string) {
   204  	fs.info.EntryName = name
   205  }
   206  
   207  func (fs *FakeSysFs) GetSystemUUID() (string, error) {
   208  	return "1F862619-BA9F-4526-8F85-ECEAF0C97430", nil
   209  }
   210  
   211  func (fs *FakeSysFs) GetDistances(nodeDir string) (string, error) {
   212  	if fs.distancesErr != nil {
   213  		return "", fs.distancesErr
   214  	}
   215  
   216  	if _, ok := fs.distances[nodeDir]; !ok {
   217  		return "", fmt.Errorf("distance not found")
   218  	}
   219  
   220  	return fs.distances[nodeDir], nil
   221  }
   222  
   223  func (fs *FakeSysFs) SetDistances(nodeDir string, distances string, err error) {
   224  	if fs.distances == nil {
   225  		fs.distances = map[string]string{nodeDir: distances}
   226  	} else {
   227  		fs.distances[nodeDir] = distances
   228  	}
   229  	fs.distancesErr = err
   230  }
   231  
   232  func (fs *FakeSysFs) IsCPUOnline(dir string) bool {
   233  	if fs.onlineCPUs == nil {
   234  		return true
   235  	}
   236  	_, ok := fs.onlineCPUs[dir]
   237  	return ok
   238  }
   239  
   240  func (fs *FakeSysFs) SetOnlineCPUs(online map[string]interface{}) {
   241  	fs.onlineCPUs = online
   242  }