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 }