@@ -1216,6 +1216,37 @@ class OtherDevice; end
1216
1216
it ( 'loads the device provider' ) { expect ( described_class . load_provider ( 'multi_provider' ) . name ) . to eq 'Puppet::Provider::MultiProvider::SomeDevice' }
1217
1217
end
1218
1218
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
1219
1250
end
1220
1251
1221
1252
context 'with a provider that does canonicalization' , agent_test : true do
@@ -1601,6 +1632,10 @@ def set(_context, changes)
1601
1632
stub_const ( 'Puppet::Provider::Remoter::Remoter' , provider_class )
1602
1633
allow ( provider_class ) . to receive ( :new ) . and_return ( provider )
1603
1634
Puppet . settings [ :strict ] = :warning
1635
+
1636
+ module ::Puppet ::Transport
1637
+ class Wibble ; end
1638
+ end
1604
1639
end
1605
1640
1606
1641
it 'is seen as a supported feature' do
@@ -1618,6 +1653,30 @@ def set(_context, changes)
1618
1653
expect ( type . context . type ) . to be_feature ( 'remote_resource' )
1619
1654
end
1620
1655
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
1621
1680
end
1622
1681
1623
1682
context 'with a `supports_noop` provider' , agent_test : true do
0 commit comments