--- /dev/null
+require 'puppet'
+require 'spec_helper'
+require 'puppet/provider/neutron_subnet/neutron'
+
+provider_class = Puppet::Type.type(:neutron_subnet).provider(:neutron)
+
+describe provider_class do
+
+ let :subnet_name do
+ 'net1'
+ end
+
+ let :subnet_attrs do
+ {
+ :name => subnet_name,
+ :ensure => 'present',
+ :cidr => '10.0.0.0/24',
+ :ip_version => '4',
+ :gateway_ip => '10.0.0.1',
+ :enable_dhcp => 'False',
+ :network_name => 'net1',
+ :tenant_id => '',
+ :allocation_pools => 'start=7.0.0.1,end=7.0.0.10',
+ :dns_nameservers => '8.8.8.8',
+ :host_routes => 'destination=12.0.0.0/24,nexthop=10.0.0.1',
+ }
+ end
+
+ describe 'when updating a subnet' do
+ let :resource do
+ Puppet::Type::Neutron_subnet.new(subnet_attrs)
+ end
+
+ let :provider do
+ provider_class.new(resource)
+ end
+
+ it 'should call subnet-update to change gateway_ip' do
+ provider.expects(:auth_neutron).with('subnet-update',
+ '--gateway-ip=10.0.0.2',
+ subnet_name)
+ provider.gateway_ip=('10.0.0.2')
+ end
+
+ it 'should call subnet-update to remove gateway_ip with empty string' do
+ provider.expects(:auth_neutron).with('subnet-update',
+ '--no-gateway',
+ subnet_name)
+ provider.gateway_ip=('')
+ end
+
+ it 'should call subnet-update to change enable_dhcp' do
+ provider.expects(:auth_neutron).with('subnet-update',
+ '--enable-dhcp',
+ subnet_name)
+ provider.enable_dhcp=('True')
+ end
+
+ it 'should call subnet-update to change dns_nameservers' do
+ provider.expects(:auth_neutron).with('subnet-update',
+ [subnet_name,
+ '--dns-nameservers',
+ 'list=true',
+ '9.9.9.9'])
+ provider.dns_nameservers=(['9.9.9.9'])
+ end
+
+ it 'should call subnet-update to change host_routes' do
+ provider.expects(:auth_neutron).with('subnet-update',
+ [subnet_name,
+ '--host-routes',
+ 'type=dict',
+ 'list=true',
+ 'destination=12.0.0.0/24,nexthop=10.0.0.2'])
+ provider.host_routes=(['destination=12.0.0.0/24,nexthop=10.0.0.2'])
+ end
+
+ it 'should not update if dns_nameservers are empty' do
+ provider.dns_nameservers=('')
+ end
+
+ it 'should not update if host_routes are empty' do
+ provider.host_routes=('')
+ end
+ end
+
+ describe 'when updating a subnet (reverse)' do
+ let :subnet_attrs_mod do
+ subnet_attrs.merge!({:enable_dhcp => 'True'})
+ end
+ let :resource do
+ Puppet::Type::Neutron_subnet.new(subnet_attrs_mod)
+ end
+
+ let :provider do
+ provider_class.new(resource)
+ end
+
+
+ it 'should call subnet-update to change enable_dhcp' do
+ provider.expects(:auth_neutron).with('subnet-update',
+ '--disable-dhcp',
+ subnet_name)
+ provider.enable_dhcp=('False')
+ end
+ end
+end