github.com/wallyworld/juju@v0.0.0-20161013125918-6cf1bc9d917a/instance/instance_test.go (about) 1 // Copyright 2013 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package instance_test 5 6 import ( 7 jc "github.com/juju/testing/checkers" 8 gc "gopkg.in/check.v1" 9 10 "github.com/juju/juju/instance" 11 ) 12 13 type HardwareSuite struct{} 14 15 var _ = gc.Suite(&HardwareSuite{}) 16 17 type parseHardwareTestSpec struct { 18 summary string 19 args []string 20 err string 21 } 22 23 func (ts *parseHardwareTestSpec) check(c *gc.C) { 24 hwc, err := instance.ParseHardware(ts.args...) 25 26 // Check the spec'ed error condition first. 27 if ts.err != "" { 28 c.Check(err, gc.ErrorMatches, ts.err) 29 // We expected an error so we don't worry about checking hwc. 30 return 31 } else if !c.Check(err, jc.ErrorIsNil) { 32 // We got an unexpected error so we don't worry about checking hwc. 33 return 34 } 35 36 // The error condition matched so we check hwc. 37 cons1, err := instance.ParseHardware(hwc.String()) 38 if !c.Check(err, jc.ErrorIsNil) { 39 // Parsing didn't work so we don't worry about checking hwc. 40 return 41 } 42 43 // Compare the round-tripped HWC. 44 c.Check(cons1, gc.DeepEquals, hwc) 45 } 46 47 var parseHardwareTests = []parseHardwareTestSpec{ 48 // Simple errors. 49 { 50 summary: "nothing at all", 51 }, { 52 summary: "empty", 53 args: []string{" "}, 54 }, { 55 summary: "complete nonsense", 56 args: []string{"cheese"}, 57 err: `malformed characteristic "cheese"`, 58 }, { 59 summary: "missing name", 60 args: []string{"=cheese"}, 61 err: `malformed characteristic "=cheese"`, 62 }, { 63 summary: "unknown characteristic", 64 args: []string{"cheese=edam"}, 65 err: `unknown characteristic "cheese"`, 66 }, 67 68 // "arch" in detail. 69 { 70 summary: "set arch empty", 71 args: []string{"arch="}, 72 }, { 73 summary: "set arch amd64", 74 args: []string{"arch=amd64"}, 75 }, { 76 summary: "set arch i386", 77 args: []string{"arch=i386"}, 78 }, { 79 summary: "set arch armhf", 80 args: []string{"arch=armhf"}, 81 }, { 82 summary: "set nonsense arch 1", 83 args: []string{"arch=cheese"}, 84 err: `bad "arch" characteristic: "cheese" not recognized`, 85 }, { 86 summary: "set nonsense arch 2", 87 args: []string{"arch=123.45"}, 88 err: `bad "arch" characteristic: "123.45" not recognized`, 89 }, { 90 summary: "double set arch together", 91 args: []string{"arch=amd64 arch=amd64"}, 92 err: `bad "arch" characteristic: already set`, 93 }, { 94 summary: "double set arch separately", 95 args: []string{"arch=armhf", "arch="}, 96 err: `bad "arch" characteristic: already set`, 97 }, 98 99 // "cores" in detail. 100 { 101 summary: "set cores empty", 102 args: []string{"cores="}, 103 }, { 104 summary: "set cores zero", 105 args: []string{"cores=0"}, 106 }, { 107 summary: "set cores", 108 args: []string{"cores=4"}, 109 }, { 110 summary: "set nonsense cores 1", 111 args: []string{"cores=cheese"}, 112 err: `bad "cores" characteristic: must be a non-negative integer`, 113 }, { 114 summary: "set nonsense cores 2", 115 args: []string{"cores=-1"}, 116 err: `bad "cores" characteristic: must be a non-negative integer`, 117 }, { 118 summary: "set nonsense cores 3", 119 args: []string{"cores=123.45"}, 120 err: `bad "cores" characteristic: must be a non-negative integer`, 121 }, { 122 summary: "double set cores together", 123 args: []string{"cores=128 cores=1"}, 124 err: `bad "cores" characteristic: already set`, 125 }, { 126 summary: "double set cores separately", 127 args: []string{"cores=128", "cores=1"}, 128 err: `bad "cores" characteristic: already set`, 129 }, 130 131 // "cpu-power" in detail. 132 { 133 summary: "set cpu-power empty", 134 args: []string{"cpu-power="}, 135 }, { 136 summary: "set cpu-power zero", 137 args: []string{"cpu-power=0"}, 138 }, { 139 summary: "set cpu-power", 140 args: []string{"cpu-power=44"}, 141 }, { 142 summary: "set nonsense cpu-power 1", 143 args: []string{"cpu-power=cheese"}, 144 err: `bad "cpu-power" characteristic: must be a non-negative integer`, 145 }, { 146 summary: "set nonsense cpu-power 2", 147 args: []string{"cpu-power=-1"}, 148 err: `bad "cpu-power" characteristic: must be a non-negative integer`, 149 }, { 150 summary: "double set cpu-power together", 151 args: []string{" cpu-power=300 cpu-power=1700 "}, 152 err: `bad "cpu-power" characteristic: already set`, 153 }, { 154 summary: "double set cpu-power separately", 155 args: []string{"cpu-power=300 ", " cpu-power=1700"}, 156 err: `bad "cpu-power" characteristic: already set`, 157 }, 158 159 // "mem" in detail. 160 { 161 summary: "set mem empty", 162 args: []string{"mem="}, 163 }, { 164 summary: "set mem zero", 165 args: []string{"mem=0"}, 166 }, { 167 summary: "set mem without suffix", 168 args: []string{"mem=512"}, 169 }, { 170 summary: "set mem with M suffix", 171 args: []string{"mem=512M"}, 172 }, { 173 summary: "set mem with G suffix", 174 args: []string{"mem=1.5G"}, 175 }, { 176 summary: "set mem with T suffix", 177 args: []string{"mem=36.2T"}, 178 }, { 179 summary: "set mem with P suffix", 180 args: []string{"mem=18.9P"}, 181 }, { 182 summary: "set nonsense mem 1", 183 args: []string{"mem=cheese"}, 184 err: `bad "mem" characteristic: must be a non-negative float with optional M/G/T/P suffix`, 185 }, { 186 summary: "set nonsense mem 2", 187 args: []string{"mem=-1"}, 188 err: `bad "mem" characteristic: must be a non-negative float with optional M/G/T/P suffix`, 189 }, { 190 summary: "set nonsense mem 3", 191 args: []string{"mem=32Y"}, 192 err: `bad "mem" characteristic: must be a non-negative float with optional M/G/T/P suffix`, 193 }, { 194 summary: "double set mem together", 195 args: []string{"mem=1G mem=2G"}, 196 err: `bad "mem" characteristic: already set`, 197 }, { 198 summary: "double set mem separately", 199 args: []string{"mem=1G", "mem=2G"}, 200 err: `bad "mem" characteristic: already set`, 201 }, 202 203 // "root-disk" in detail. 204 { 205 summary: "set root-disk empty", 206 args: []string{"root-disk="}, 207 }, { 208 summary: "set root-disk zero", 209 args: []string{"root-disk=0"}, 210 }, { 211 summary: "set root-disk without suffix", 212 args: []string{"root-disk=512"}, 213 }, { 214 summary: "set root-disk with M suffix", 215 args: []string{"root-disk=512M"}, 216 }, { 217 summary: "set root-disk with G suffix", 218 args: []string{"root-disk=1.5G"}, 219 }, { 220 summary: "set root-disk with T suffix", 221 args: []string{"root-disk=36.2T"}, 222 }, { 223 summary: "set root-disk with P suffix", 224 args: []string{"root-disk=18.9P"}, 225 }, { 226 summary: "set nonsense root-disk 1", 227 args: []string{"root-disk=cheese"}, 228 err: `bad "root-disk" characteristic: must be a non-negative float with optional M/G/T/P suffix`, 229 }, { 230 summary: "set nonsense root-disk 2", 231 args: []string{"root-disk=-1"}, 232 err: `bad "root-disk" characteristic: must be a non-negative float with optional M/G/T/P suffix`, 233 }, { 234 summary: "set nonsense root-disk 3", 235 args: []string{"root-disk=32Y"}, 236 err: `bad "root-disk" characteristic: must be a non-negative float with optional M/G/T/P suffix`, 237 }, { 238 summary: "double set root-disk together", 239 args: []string{"root-disk=1G root-disk=2G"}, 240 err: `bad "root-disk" characteristic: already set`, 241 }, { 242 summary: "double set root-disk separately", 243 args: []string{"root-disk=1G", "root-disk=2G"}, 244 err: `bad "root-disk" characteristic: already set`, 245 }, 246 247 // "availability-zone" in detail. 248 { 249 summary: "set availability-zone empty", 250 args: []string{"availability-zone="}, 251 }, { 252 summary: "set availability-zone non-empty", 253 args: []string{"availability-zone=a_zone"}, 254 }, { 255 summary: "double set availability-zone together", 256 args: []string{"availability-zone=a_zone availability-zone=a_zone"}, 257 err: `bad "availability-zone" characteristic: already set`, 258 }, { 259 summary: "double set availability-zone separately", 260 args: []string{"availability-zone=a_zone", "availability-zone="}, 261 err: `bad "availability-zone" characteristic: already set`, 262 }, 263 264 // Everything at once. 265 { 266 summary: "kitchen sink together", 267 args: []string{" root-disk=4G mem=2T arch=i386 cores=4096 cpu-power=9001 availability-zone=a_zone"}, 268 }, { 269 summary: "kitchen sink separately", 270 args: []string{"root-disk=4G", "mem=2T", "cores=4096", "cpu-power=9001", "arch=armhf", "availability-zone=a_zone"}, 271 }, 272 } 273 274 func (s *HardwareSuite) TestParseHardware(c *gc.C) { 275 for i, t := range parseHardwareTests { 276 c.Logf("test %d: %s", i, t.summary) 277 t.check(c) 278 } 279 }