github.com/dctrud/umoci@v0.4.3-0.20191016193643-05a1d37de015/oci/config/generate/spec_test.go (about) 1 /* 2 * umoci: Umoci Modifies Open Containers' Images 3 * Copyright (C) 2016, 2017, 2018 SUSE LLC. 4 * 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at 8 * 9 * http://www.apache.org/licenses/LICENSE-2.0 10 * 11 * Unless required by applicable law or agreed to in writing, software 12 * distributed under the License is distributed on an "AS IS" BASIS, 13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 * See the License for the specific language governing permissions and 15 * limitations under the License. 16 */ 17 18 package generate 19 20 import ( 21 "io" 22 "io/ioutil" 23 "os" 24 "reflect" 25 "testing" 26 "time" 27 // Import is necessary for go-digest. 28 _ "crypto/sha256" 29 30 "github.com/opencontainers/go-digest" 31 ) 32 33 func TestWriteTo(t *testing.T) { 34 g := New() 35 36 fh, err := ioutil.TempFile("", "umoci-TestWriteTo") 37 if err != nil { 38 t.Fatal(err) 39 } 40 defer os.RemoveAll(fh.Name()) 41 defer fh.Close() 42 43 size, err := g.WriteTo(fh) 44 if err != nil { 45 t.Errorf("failed to write: %+v", err) 46 } 47 48 fi, err := fh.Stat() 49 if err != nil { 50 t.Errorf("failed to stat: %+v", err) 51 } 52 53 if fi.Size() != size { 54 t.Errorf("wrong size: expected %d, got %d", size, fi.Size()) 55 } 56 } 57 58 func TestConfigUser(t *testing.T) { 59 g := New() 60 expected := "some_value" 61 62 g.SetConfigUser(expected) 63 got := g.ConfigUser() 64 65 if expected != got { 66 t.Errorf("ConfigUser get/set doesn't match: expected %v, got %v", expected, got) 67 } 68 } 69 70 func TestConfigWorkingDir(t *testing.T) { 71 g := New() 72 expected := "some_value" 73 74 g.SetConfigWorkingDir(expected) 75 got := g.ConfigWorkingDir() 76 77 if expected != got { 78 t.Errorf("ConfigWorkingDir get/set doesn't match: expected %v, got %v", expected, got) 79 } 80 } 81 82 func TestArchitecture(t *testing.T) { 83 g := New() 84 expected := "some_value" 85 86 g.SetArchitecture(expected) 87 got := g.Architecture() 88 89 if expected != got { 90 t.Errorf("Architecture get/set doesn't match: expected %v, got %v", expected, got) 91 } 92 } 93 94 func TestOS(t *testing.T) { 95 g := New() 96 expected := "some_value" 97 98 g.SetOS(expected) 99 got := g.OS() 100 101 if expected != got { 102 t.Errorf("OS get/set doesn't match: expected %v, got %v", expected, got) 103 } 104 } 105 106 func TestAuthor(t *testing.T) { 107 g := New() 108 expected := "some_value" 109 110 g.SetAuthor(expected) 111 got := g.Author() 112 113 if expected != got { 114 t.Errorf("Author get/set doesn't match: expected %v, got %v", expected, got) 115 } 116 } 117 118 func TestRootfsType(t *testing.T) { 119 g := New() 120 expected := "some_value" 121 122 g.SetRootfsType(expected) 123 got := g.RootfsType() 124 125 if expected != got { 126 t.Errorf("RootfsType get/set doesn't match: expected %v, got %v", expected, got) 127 } 128 } 129 130 func TestRootfsDiffIDs(t *testing.T) { 131 g := New() 132 133 values := []string{"a", "b", "c"} 134 diffids := []digest.Digest{} 135 for _, value := range values { 136 digester := digest.SHA256.Digester() 137 _, _ = io.WriteString(digester.Hash(), value) 138 diffids = append(diffids, digester.Digest()) 139 } 140 141 g.ClearRootfsDiffIDs() 142 for _, diffid := range diffids { 143 g.AddRootfsDiffID(diffid) 144 } 145 146 got := g.RootfsDiffIDs() 147 148 if !reflect.DeepEqual(diffids, got) { 149 t.Errorf("RootfsDiffIDs doesn't match: expected %v, got %v", diffids, got) 150 } 151 } 152 153 func TestConfigEntrypoint(t *testing.T) { 154 g := New() 155 entrypoint := []string{"a", "b", "c"} 156 157 g.SetConfigEntrypoint(entrypoint) 158 got := g.ConfigEntrypoint() 159 160 if !reflect.DeepEqual(entrypoint, got) { 161 t.Errorf("ConfigEntrypoint doesn't match: expected %v, got %v", entrypoint, got) 162 } 163 } 164 165 func TestConfigCmd(t *testing.T) { 166 g := New() 167 entrypoint := []string{"a", "b", "c"} 168 169 g.SetConfigCmd(entrypoint) 170 got := g.ConfigCmd() 171 172 if !reflect.DeepEqual(entrypoint, got) { 173 t.Errorf("ConfigCmd doesn't match: expected %v, got %v", entrypoint, got) 174 } 175 } 176 177 func TestConfigExposedPorts(t *testing.T) { 178 g := New() 179 exposedports := map[string]struct{}{ 180 "a": {}, 181 "b": {}, 182 "c": {}, 183 } 184 185 g.ClearConfigExposedPorts() 186 for exposedport := range exposedports { 187 g.AddConfigExposedPort(exposedport) 188 } 189 190 got := g.ConfigExposedPorts() 191 if !reflect.DeepEqual(exposedports, got) { 192 t.Errorf("ConfigExposedPorts doesn't match: expected %v, got %v", exposedports, got) 193 } 194 195 delete(exposedports, "a") 196 g.RemoveConfigExposedPort("a") 197 delete(got, "b") 198 199 got = g.ConfigExposedPorts() 200 if !reflect.DeepEqual(exposedports, got) { 201 t.Errorf("ConfigExposedPorts doesn't match: expected %v, got %v", exposedports, got) 202 } 203 } 204 205 func TestConfigVolumes(t *testing.T) { 206 g := New() 207 volumes := map[string]struct{}{ 208 "a": {}, 209 "b": {}, 210 "c": {}, 211 } 212 213 g.ClearConfigVolumes() 214 for volume := range volumes { 215 g.AddConfigVolume(volume) 216 } 217 218 got := g.ConfigVolumes() 219 if !reflect.DeepEqual(volumes, got) { 220 t.Errorf("ConfigVolumes doesn't match: expected %v, got %v", volumes, got) 221 } 222 223 delete(volumes, "a") 224 g.RemoveConfigVolume("a") 225 delete(got, "b") 226 227 got = g.ConfigVolumes() 228 if !reflect.DeepEqual(volumes, got) { 229 t.Errorf("ConfigVolumes doesn't match: expected %v, got %v", volumes, got) 230 } 231 } 232 233 func TestConfigEnv(t *testing.T) { 234 g := New() 235 env := []string{ 236 "HOME=a,b,c", 237 "TEST=a=b=c", 238 "ANOTHER=", 239 } 240 241 g.ClearConfigEnv() 242 g.AddConfigEnv("HOME", "a,b,c") 243 g.AddConfigEnv("TEST", "a=b=c") 244 g.AddConfigEnv("ANOTHER", "") 245 246 got := g.ConfigEnv() 247 if !reflect.DeepEqual(env, got) { 248 t.Errorf("ConfigEnv doesn't match: expected %v, got %v", env, got) 249 } 250 251 env[1] = "TEST=different" 252 g.AddConfigEnv("TEST", "different") 253 254 got = g.ConfigEnv() 255 if !reflect.DeepEqual(env, got) { 256 t.Errorf("ConfigEnv doesn't match: expected %v, got %v", env, got) 257 } 258 } 259 260 func TestConfigLabels(t *testing.T) { 261 g := New() 262 labels := map[string]string{ 263 "some": "key", 264 "value": "mappings", 265 "go": "here", 266 } 267 268 g.ClearConfigLabels() 269 for k, v := range labels { 270 g.AddConfigLabel(k, v) 271 } 272 273 got := g.ConfigLabels() 274 if !reflect.DeepEqual(labels, got) { 275 t.Errorf("ConfigLabels doesn't match: expected %v, got %v", labels, got) 276 } 277 278 delete(labels, "some") 279 g.RemoveConfigLabel("some") 280 281 got = g.ConfigLabels() 282 if !reflect.DeepEqual(labels, got) { 283 t.Errorf("ConfigLabels doesn't match: expected %v, got %v", labels, got) 284 } 285 286 delete(labels, "nonexist") 287 g.RemoveConfigLabel("nonexist") 288 delete(got, "value") 289 290 got = g.ConfigLabels() 291 if !reflect.DeepEqual(labels, got) { 292 t.Errorf("ConfigLabels doesn't match: expected %v, got %v", labels, got) 293 } 294 } 295 296 func TestConfigStopSignal(t *testing.T) { 297 g := New() 298 signals := []string{ 299 "SIGSTOP", 300 "SIGKILL", 301 "SIGUSR1", 302 "SIGINFO", 303 "SIGPWR", 304 "SIGRT13", 305 } 306 307 for _, signal := range signals { 308 g.SetConfigStopSignal(signal) 309 got := g.ConfigStopSignal() 310 if signal != got { 311 t.Errorf("ConfigStopSignal doesn't match: expected %q, got %q", signal, got) 312 } 313 } 314 } 315 316 func TestCreated(t *testing.T) { 317 g := New() 318 timeA := time.Now() 319 g.SetCreated(timeA) 320 timeB := g.Created() 321 322 if !timeA.Equal(timeB) { 323 t.Errorf("created get/set doesn't match: expected %v, got %v", timeA, timeB) 324 } 325 }