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  }