@@ -1216,6 +1216,37 @@ class OtherDevice; end
12161216 it ( 'loads the device provider' ) { expect ( described_class . load_provider ( 'multi_provider' ) . name ) . to eq 'Puppet::Provider::MultiProvider::SomeDevice' }
12171217 end
12181218 end
1219+
1220+ context 'with a transport configured' do
1221+ let ( :definition ) { { name : 'multi_provider' , attributes : { } } }
1222+ let ( :transport ) { instance_double ( 'Puppet::ResourceApi::Transport::Wrapper' , 'transport' ) }
1223+ let ( :schema_def ) { instance_double ( 'Puppet::ResourceApi::TransportSchemaDef' , 'schema_def' ) }
1224+
1225+ before ( :each ) do
1226+ allow ( Puppet ::Util ::NetworkDevice ) . to receive ( :current ) . with ( no_args ) . and_return ( transport )
1227+ allow ( transport ) . to receive ( :is_a? ) . with ( Puppet ::ResourceApi ::Transport ::Wrapper ) . and_return ( true )
1228+ allow ( transport ) . to receive ( :schema ) . and_return ( schema_def )
1229+ allow ( schema_def ) . to receive ( :name ) . and_return ( schema_name )
1230+
1231+ module ::Puppet ::Provider ::MultiProvider
1232+ class MultiProvider ; end
1233+ class SomeDevice ; end
1234+ class OtherDevice ; end
1235+ end
1236+ end
1237+
1238+ context 'with no device-specific provider' do
1239+ let ( :schema_name ) { 'multi_provider' }
1240+
1241+ it ( 'loads the default provider' ) { expect ( described_class . load_provider ( 'multi_provider' ) . name ) . to eq 'Puppet::Provider::MultiProvider::MultiProvider' }
1242+ end
1243+
1244+ context 'with a device-specific provider' do
1245+ let ( :schema_name ) { 'some_device' }
1246+
1247+ it ( 'loads the device provider' ) { expect ( described_class . load_provider ( 'multi_provider' ) . name ) . to eq 'Puppet::Provider::MultiProvider::SomeDevice' }
1248+ end
1249+ end
12191250 end
12201251
12211252 context 'with a provider that does canonicalization' , agent_test : true do
@@ -1601,6 +1632,10 @@ def set(_context, changes)
16011632 stub_const ( 'Puppet::Provider::Remoter::Remoter' , provider_class )
16021633 allow ( provider_class ) . to receive ( :new ) . and_return ( provider )
16031634 Puppet . settings [ :strict ] = :warning
1635+
1636+ module ::Puppet ::Transport
1637+ class Wibble ; end
1638+ end
16041639 end
16051640
16061641 it 'is seen as a supported feature' do
@@ -1618,6 +1653,30 @@ def set(_context, changes)
16181653 expect ( type . context . type ) . to be_feature ( 'remote_resource' )
16191654 end
16201655 end
1656+
1657+ describe '#self.my_provider' do
1658+ subject ( :type ) { Puppet ::Type . type ( :remoter ) }
1659+
1660+ let ( :instance ) { type . new ( name : 'remote_thing' , test_string : 'wibble' ) }
1661+ let ( :wrapper ) { instance_double ( 'Puppet::ResourceApi::Transport::Wrapper' , 'wrapper' ) }
1662+ let ( :transport ) { instance_double ( 'Puppet::Transport::Wibble' , 'transport' ) }
1663+
1664+ before ( :each ) do
1665+ allow ( described_class ) . to receive ( :load_provider ) . and_return ( provider )
1666+ allow ( provider ) . to receive ( :new ) . and_return ( provider )
1667+ end
1668+
1669+ context 'when a transport is returned by NetworkDevice.current' do
1670+ it 'stores the provider with the the name of the transport' do
1671+ allow ( Puppet ::Util ::NetworkDevice ) . to receive ( :current ) . and_return ( wrapper )
1672+ allow ( wrapper ) . to receive ( :is_a? ) . with ( Puppet ::ResourceApi ::Transport ::Wrapper ) . and_return ( true )
1673+ allow ( wrapper ) . to receive ( :transport ) . and_return ( transport )
1674+ allow ( transport ) . to receive ( :class ) . and_return ( Puppet ::Transport ::Wibble )
1675+
1676+ expect ( instance . my_provider ) . to eq provider
1677+ end
1678+ end
1679+ end
16211680 end
16221681
16231682 context 'with a `supports_noop` provider' , agent_test : true do
0 commit comments