github.com/juju/juju@v0.0.0-20240430160146-1752b71fcf00/provider/lxd/export_test.go (about) 1 // Copyright 2015 Canonical Ltd. 2 // Licensed under the AGPLv3, see LICENCE file for details. 3 4 package lxd 5 6 import ( 7 "errors" 8 "net/http" 9 10 "github.com/juju/clock" 11 12 "github.com/juju/juju/container/lxd" 13 "github.com/juju/juju/environs" 14 ) 15 16 var ( 17 NewInstance = newInstance 18 GetCertificates = getCertificates 19 ParseAPIVersion = parseAPIVersion 20 ) 21 22 func NewProviderWithMocks( 23 creds environs.ProviderCredentials, 24 credsRegister environs.ProviderCredentialsRegister, 25 serverFactory ServerFactory, 26 configReader LXCConfigReader, 27 ) environs.EnvironProvider { 28 return &environProvider{ 29 ProviderCredentials: creds, 30 ProviderCredentialsRegister: credsRegister, 31 serverFactory: serverFactory, 32 lxcConfigReader: configReader, 33 } 34 } 35 36 func NewProviderCredentials( 37 certReadWriter CertificateReadWriter, 38 certGenerator CertificateGenerator, 39 serverFactory ServerFactory, 40 configReader LXCConfigReader, 41 ) environs.ProviderCredentials { 42 return environProviderCredentials{ 43 certReadWriter: certReadWriter, 44 certGenerator: certGenerator, 45 serverFactory: serverFactory, 46 lxcConfigReader: configReader, 47 } 48 } 49 50 func NewServerFactoryWithMocks(localServerFunc func() (Server, error), 51 remoteServerFunc func(lxd.ServerSpec) (Server, error), 52 interfaceAddress InterfaceAddress, 53 clock clock.Clock, 54 ) ServerFactory { 55 return &serverFactory{ 56 newLocalServerFunc: localServerFunc, 57 newRemoteServerFunc: remoteServerFunc, 58 interfaceAddress: interfaceAddress, 59 clock: clock, 60 newHTTPClientFunc: NewHTTPClientFunc(func() *http.Client { 61 return &http.Client{} 62 }), 63 } 64 } 65 66 func NewServerFactoryWithError() ServerFactory { 67 return &serverFactory{ 68 newLocalServerFunc: func() (Server, error) { return nil, errors.New("oops") }, 69 newRemoteServerFunc: func(lxd.ServerSpec) (Server, error) { return nil, errors.New("oops") }, 70 newHTTPClientFunc: func() *http.Client { return &http.Client{} }, 71 } 72 } 73 74 func ExposeInstContainer(inst *environInstance) *lxd.Container { 75 return inst.container 76 } 77 78 func ExposeInstEnv(inst *environInstance) *environ { 79 return inst.env 80 } 81 82 func ExposeEnvConfig(env *environ) *environConfig { 83 return env.ecfgUnlocked 84 } 85 86 func ExposeEnvServer(env *environ) Server { 87 return env.server() 88 } 89 90 func GetImageSources(env environs.Environ) ([]lxd.ServerSpec, error) { 91 lxdEnv, ok := env.(*environ) 92 if !ok { 93 return nil, errors.New("not a LXD environ") 94 } 95 return lxdEnv.getImageSources() 96 }