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  }