github.com/skippbox/kompose-origin@v0.0.0-20160524133224-16a9dca7bac2/project/client_factory_test.go (about)

     1  package project
     2  
     3  import (
     4  	"os"
     5  	"testing"
     6  
     7  	"github.com/docker/libcompose/docker/client"
     8  )
     9  
    10  func TestFactoryWithEnv(t *testing.T) {
    11  	cases := []struct {
    12  		envs            map[string]string
    13  		expectedError   string
    14  		expectedVersion string
    15  	}{
    16  		{
    17  			envs:            map[string]string{},
    18  			expectedVersion: "v1.20",
    19  		},
    20  		{
    21  			envs: map[string]string{
    22  				"DOCKER_CERT_PATH": "invalid/path",
    23  			},
    24  			expectedError:   "Could not load X509 key pair: open invalid/path/cert.pem: no such file or directory. Make sure the key is not encrypted",
    25  			expectedVersion: "v1.20",
    26  		},
    27  		{
    28  			envs: map[string]string{
    29  				"DOCKER_API_VERSION": "1.22",
    30  			},
    31  			expectedVersion: "1.22",
    32  		},
    33  	}
    34  	for _, c := range cases {
    35  		recoverEnvs := setupEnvs(t, c.envs)
    36  		factory, err := NewDefaultClientFactory(client.Options{})
    37  		if c.expectedError != "" {
    38  			if err == nil || err.Error() != c.expectedError {
    39  				t.Errorf("expected an error %s, got %s, for %v", c.expectedError, err.Error(), c)
    40  			}
    41  		} else {
    42  			if err != nil {
    43  				t.Error(err)
    44  			}
    45  			apiclient := factory.Create(nil)
    46  			version := apiclient.ClientVersion()
    47  			if version != c.expectedVersion {
    48  				t.Errorf("expected %s, got %s, for %v", c.expectedVersion, version, c)
    49  			}
    50  		}
    51  		recoverEnvs(t)
    52  	}
    53  }
    54  
    55  func TestFactoryWithOptions(t *testing.T) {
    56  	cases := []struct {
    57  		options         client.Options
    58  		expectedError   string
    59  		expectedVersion string
    60  	}{
    61  		{
    62  			options: client.Options{
    63  				Host: "host",
    64  			},
    65  			expectedError: "unable to parse docker host `host`",
    66  		},
    67  		{
    68  			options: client.Options{
    69  				Host: "invalid://host",
    70  			},
    71  			expectedVersion: "v1.20",
    72  		},
    73  		{
    74  			options: client.Options{
    75  				Host:       "tcp://host",
    76  				APIVersion: "v1.22",
    77  			},
    78  			expectedVersion: "v1.22",
    79  		},
    80  	}
    81  	for _, c := range cases {
    82  		factory, err := NewDefaultClientFactory(c.options)
    83  		if c.expectedError != "" {
    84  			if err == nil || err.Error() != c.expectedError {
    85  				t.Errorf("expected an error %s, got %s, for %v", c.expectedError, err.Error(), c)
    86  			}
    87  		} else {
    88  			if err != nil {
    89  				t.Error(err)
    90  			}
    91  			apiclient := factory.Create(nil)
    92  			version := apiclient.ClientVersion()
    93  			if version != c.expectedVersion {
    94  				t.Errorf("expected %s, got %s, for %v", c.expectedVersion, version, c)
    95  			}
    96  		}
    97  	}
    98  }
    99  
   100  func setupEnvs(t *testing.T, envs map[string]string) func(*testing.T) {
   101  	oldEnvs := map[string]string{}
   102  	for key, value := range envs {
   103  		oldEnv := os.Getenv(key)
   104  		oldEnvs[key] = oldEnv
   105  		err := os.Setenv(key, value)
   106  		if err != nil {
   107  			t.Error(err)
   108  		}
   109  	}
   110  	return func(t *testing.T) {
   111  		for key, value := range oldEnvs {
   112  			err := os.Setenv(key, value)
   113  			if err != nil {
   114  				t.Error(err)
   115  			}
   116  		}
   117  	}
   118  }