github.com/axw/juju@v0.0.0-20161005053422-4bd6544d08d4/provider/common/mock_test.go (about)

     1  // Copyright 2013 Canonical Ltd.
     2  // Licensed under the AGPLv3, see LICENCE file for details.
     3  
     4  package common_test
     5  
     6  import (
     7  	"io"
     8  
     9  	"github.com/juju/juju/cloudconfig/instancecfg"
    10  	"github.com/juju/juju/constraints"
    11  	"github.com/juju/juju/environs"
    12  	"github.com/juju/juju/environs/config"
    13  	"github.com/juju/juju/environs/simplestreams"
    14  	"github.com/juju/juju/environs/storage"
    15  	"github.com/juju/juju/instance"
    16  	"github.com/juju/juju/network"
    17  	"github.com/juju/juju/provider/common"
    18  	jujustorage "github.com/juju/juju/storage"
    19  	"github.com/juju/juju/tools"
    20  )
    21  
    22  type allInstancesFunc func() ([]instance.Instance, error)
    23  type startInstanceFunc func(string, constraints.Value, []string, tools.List, *instancecfg.InstanceConfig) (instance.Instance, *instance.HardwareCharacteristics, []network.InterfaceInfo, error)
    24  type stopInstancesFunc func([]instance.Id) error
    25  type getToolsSourcesFunc func() ([]simplestreams.DataSource, error)
    26  type configFunc func() *config.Config
    27  type setConfigFunc func(*config.Config) error
    28  
    29  type mockEnviron struct {
    30  	storage          storage.Storage
    31  	allInstances     allInstancesFunc
    32  	startInstance    startInstanceFunc
    33  	stopInstances    stopInstancesFunc
    34  	getToolsSources  getToolsSourcesFunc
    35  	config           configFunc
    36  	setConfig        setConfigFunc
    37  	storageProviders jujustorage.StaticProviderRegistry
    38  	environs.Environ // stub out other methods with panics
    39  }
    40  
    41  func (env *mockEnviron) Storage() storage.Storage {
    42  	return env.storage
    43  }
    44  
    45  func (env *mockEnviron) AllInstances() ([]instance.Instance, error) {
    46  	return env.allInstances()
    47  }
    48  func (env *mockEnviron) StartInstance(args environs.StartInstanceParams) (*environs.StartInstanceResult, error) {
    49  	inst, hw, networkInfo, err := env.startInstance(
    50  		args.Placement,
    51  		args.Constraints,
    52  		nil,
    53  		args.Tools,
    54  		args.InstanceConfig,
    55  	)
    56  	if err != nil {
    57  		return nil, err
    58  	}
    59  	return &environs.StartInstanceResult{
    60  		Instance:    inst,
    61  		Hardware:    hw,
    62  		NetworkInfo: networkInfo,
    63  	}, nil
    64  }
    65  
    66  func (env *mockEnviron) StopInstances(ids ...instance.Id) error {
    67  	return env.stopInstances(ids)
    68  }
    69  
    70  func (env *mockEnviron) Config() *config.Config {
    71  	return env.config()
    72  }
    73  
    74  func (env *mockEnviron) SetConfig(cfg *config.Config) error {
    75  	if env.setConfig != nil {
    76  		return env.setConfig(cfg)
    77  	}
    78  	return nil
    79  }
    80  
    81  func (env *mockEnviron) GetToolsSources() ([]simplestreams.DataSource, error) {
    82  	if env.getToolsSources != nil {
    83  		return env.getToolsSources()
    84  	}
    85  	datasource := storage.NewStorageSimpleStreamsDataSource("test cloud storage", env.Storage(), storage.BaseToolsPath, simplestreams.SPECIFIC_CLOUD_DATA, false)
    86  	return []simplestreams.DataSource{datasource}, nil
    87  }
    88  
    89  func (env *mockEnviron) StorageProviderTypes() ([]jujustorage.ProviderType, error) {
    90  	return env.storageProviders.StorageProviderTypes()
    91  }
    92  
    93  func (env *mockEnviron) StorageProvider(t jujustorage.ProviderType) (jujustorage.Provider, error) {
    94  	return env.storageProviders.StorageProvider(t)
    95  }
    96  
    97  type availabilityZonesFunc func() ([]common.AvailabilityZone, error)
    98  type instanceAvailabilityZoneNamesFunc func([]instance.Id) ([]string, error)
    99  
   100  type mockZonedEnviron struct {
   101  	mockEnviron
   102  	availabilityZones             availabilityZonesFunc
   103  	instanceAvailabilityZoneNames instanceAvailabilityZoneNamesFunc
   104  }
   105  
   106  func (env *mockZonedEnviron) AvailabilityZones() ([]common.AvailabilityZone, error) {
   107  	return env.availabilityZones()
   108  }
   109  
   110  func (env *mockZonedEnviron) InstanceAvailabilityZoneNames(ids []instance.Id) ([]string, error) {
   111  	return env.instanceAvailabilityZoneNames(ids)
   112  }
   113  
   114  type mockInstance struct {
   115  	id                string
   116  	addresses         []network.Address
   117  	addressesErr      error
   118  	dnsName           string
   119  	dnsNameErr        error
   120  	instance.Instance // stub out other methods with panics
   121  }
   122  
   123  func (inst *mockInstance) Id() instance.Id {
   124  	return instance.Id(inst.id)
   125  }
   126  
   127  func (inst *mockInstance) Addresses() ([]network.Address, error) {
   128  	return inst.addresses, inst.addressesErr
   129  }
   130  
   131  type mockStorage struct {
   132  	storage.Storage
   133  	putErr       error
   134  	removeAllErr error
   135  }
   136  
   137  func (stor *mockStorage) Put(name string, reader io.Reader, size int64) error {
   138  	if stor.putErr != nil {
   139  		return stor.putErr
   140  	}
   141  	return stor.Storage.Put(name, reader, size)
   142  }
   143  
   144  func (stor *mockStorage) RemoveAll() error {
   145  	if stor.removeAllErr != nil {
   146  		return stor.removeAllErr
   147  	}
   148  	return stor.Storage.RemoveAll()
   149  }
   150  
   151  type mockAvailabilityZone struct {
   152  	name      string
   153  	available bool
   154  }
   155  
   156  func (z *mockAvailabilityZone) Name() string {
   157  	return z.name
   158  }
   159  
   160  func (z *mockAvailabilityZone) Available() bool {
   161  	return z.available
   162  }