github.com/zhgqiang/libcompose@v0.4.1-0.20210112080336-bff7ba3690e1/docker/volume/volume_test.go (about) 1 package volume 2 3 import ( 4 "testing" 5 6 "github.com/docker/docker/api/types/volume" 7 "github.com/docker/docker/client" 8 "github.com/zhgqiang/libcompose/config" 9 ) 10 11 func TestVolumesFromServices(t *testing.T) { 12 cases := []struct { 13 volumeConfigs map[string]*config.VolumeConfig 14 services map[string]*config.ServiceConfig 15 volumeEnabled bool 16 expectedVolumes []*Volume 17 expectedError bool 18 }{ 19 {}, 20 { 21 volumeConfigs: map[string]*config.VolumeConfig{ 22 "vol1": {}, 23 }, 24 services: map[string]*config.ServiceConfig{}, 25 expectedVolumes: []*Volume{ 26 { 27 name: "vol1", 28 projectName: "prj", 29 }, 30 }, 31 expectedError: false, 32 }, 33 { 34 volumeConfigs: map[string]*config.VolumeConfig{ 35 "vol1": nil, 36 }, 37 services: map[string]*config.ServiceConfig{}, 38 expectedVolumes: []*Volume{ 39 { 40 name: "vol1", 41 projectName: "prj", 42 }, 43 }, 44 expectedError: false, 45 }, 46 } 47 48 for index, c := range cases { 49 services := config.NewServiceConfigs() 50 for name, service := range c.services { 51 services.Add(name, service) 52 } 53 54 volumes, err := VolumesFromServices(&volumeClient{}, "prj", c.volumeConfigs, services, c.volumeEnabled) 55 if c.expectedError { 56 if err == nil { 57 t.Fatalf("%d: expected an error, got nothing", index) 58 } 59 } else { 60 if err != nil { 61 t.Fatalf("%d: didn't expect an error, got one %s", index, err.Error()) 62 } 63 } 64 if volumes.volumeEnabled != c.volumeEnabled { 65 t.Fatalf("%d: expected volume enabled %v, got %v", index, c.volumeEnabled, volumes.volumeEnabled) 66 } 67 if len(volumes.volumes) != len(c.expectedVolumes) { 68 t.Fatalf("%d: expected %v, got %v", index, c.expectedVolumes, volumes.volumes) 69 } 70 for _, volume := range volumes.volumes { 71 testExpectedContainsVolume(t, index, c.expectedVolumes, volume) 72 } 73 } 74 } 75 76 func testExpectedContainsVolume(t *testing.T, index int, expected []*Volume, volume *Volume) { 77 found := false 78 for _, e := range expected { 79 if e.name == volume.name { 80 found = true 81 break 82 } 83 } 84 if !found { 85 t.Fatalf("%d: volume %v not found in %v", index, volume, expected) 86 } 87 } 88 89 type volumeClient struct { 90 client.Client 91 expectedName string 92 expectedVolumeCreate volume.VolumeCreateBody 93 inspectError error 94 inspectVolumeDriver string 95 inspectVolumeOptions map[string]string 96 removeError error 97 }