From: marios <[email protected]>

Signed-off-by: marios <[email protected]>
---
 .../drivers/mock/data/addresses/192.168.0.1.yml    |  3 ++
 .../drivers/mock/data/addresses/192.168.0.2.yml    |  3 ++
 .../drivers/mock/data/addresses/192.168.0.3.yml    |  3 ++
 .../drivers/mock/data/addresses/192.168.0.4.yml    |  3 ++
 server/lib/deltacloud/drivers/mock/mock_driver.rb  | 62 ++++++++++++++++++++++
 5 files changed, 74 insertions(+)
 create mode 100644 
server/lib/deltacloud/drivers/mock/data/addresses/192.168.0.1.yml
 create mode 100644 
server/lib/deltacloud/drivers/mock/data/addresses/192.168.0.2.yml
 create mode 100644 
server/lib/deltacloud/drivers/mock/data/addresses/192.168.0.3.yml
 create mode 100644 
server/lib/deltacloud/drivers/mock/data/addresses/192.168.0.4.yml

diff --git a/server/lib/deltacloud/drivers/mock/data/addresses/192.168.0.1.yml 
b/server/lib/deltacloud/drivers/mock/data/addresses/192.168.0.1.yml
new file mode 100644
index 0000000..e34604a
--- /dev/null
+++ b/server/lib/deltacloud/drivers/mock/data/addresses/192.168.0.1.yml
@@ -0,0 +1,3 @@
+---
+:id: 192.168.0.1
+:instance_id: 
diff --git a/server/lib/deltacloud/drivers/mock/data/addresses/192.168.0.2.yml 
b/server/lib/deltacloud/drivers/mock/data/addresses/192.168.0.2.yml
new file mode 100644
index 0000000..929c4cc
--- /dev/null
+++ b/server/lib/deltacloud/drivers/mock/data/addresses/192.168.0.2.yml
@@ -0,0 +1,3 @@
+---
+:id: 192.168.0.2
+:instance_id: 
diff --git a/server/lib/deltacloud/drivers/mock/data/addresses/192.168.0.3.yml 
b/server/lib/deltacloud/drivers/mock/data/addresses/192.168.0.3.yml
new file mode 100644
index 0000000..9862f21
--- /dev/null
+++ b/server/lib/deltacloud/drivers/mock/data/addresses/192.168.0.3.yml
@@ -0,0 +1,3 @@
+---
+:id: "192.168.0.3"
+:instance_id:
diff --git a/server/lib/deltacloud/drivers/mock/data/addresses/192.168.0.4.yml 
b/server/lib/deltacloud/drivers/mock/data/addresses/192.168.0.4.yml
new file mode 100644
index 0000000..64124f7
--- /dev/null
+++ b/server/lib/deltacloud/drivers/mock/data/addresses/192.168.0.4.yml
@@ -0,0 +1,3 @@
+---
+:id: "192.168.0.4"
+:instance_id:
diff --git a/server/lib/deltacloud/drivers/mock/mock_driver.rb 
b/server/lib/deltacloud/drivers/mock/mock_driver.rb
index b02e653..e765a9f 100644
--- a/server/lib/deltacloud/drivers/mock/mock_driver.rb
+++ b/server/lib/deltacloud/drivers/mock/mock_driver.rb
@@ -17,6 +17,7 @@
 require 'yaml'
 require 'base64'
 require 'etc'
+require 'ipaddr'
 
 require_relative 'mock_client'
 require_relative 'mock_driver_cimi_methods'
@@ -333,6 +334,48 @@ module Deltacloud::Drivers::Mock
       @client.destroy(:keys, key.id)
     end
 
+    def addresses(credentials, opts={})
+      check_credentials(credentials)
+      addresses = @client.build_all(Address)
+      addresses = filter_on( addresses, :id, opts )
+    end
+
+    def create_address(credentials, opts={})
+      check_credentials(credentials)
+      address = {:id => allocate_mock_address.to_s, :instance_id=>nil}
+      @client.store(:addresses, address)
+      Address.new(address)
+    end
+
+    def destroy_address(credentials, opts={})
+      check_credentials(credentials)
+      address = @client.load(:addresses, opts[:id])
+      raise "AddressInUse" unless address[:instance_id].nil?
+      @client.destroy(:addresses, opts[:id])
+    end
+
+    def associate_address(credentials, opts={})
+      check_credentials(credentials)
+      address = @client.load(:addresses, opts[:id])
+      raise "AddressInUse" unless address[:instance_id].nil?
+      instance = @client.load(:instances, opts[:instance_id])
+      address[:instance_id] = instance[:id]
+      instance[:public_addresses] = [InstanceAddress.new(address[:id])]
+      @client.store(:addresses, address)
+      @client.store(:instances, instance)
+    end
+
+    def disassociate_address(credentials, opts={})
+      check_credentials(credentials)
+      address = @client.load(:addresses, opts[:id])
+      raise "AddressNotInUse" unless address[:instance_id]
+      instance = @client.load(:instances, address[:instance_id])
+      address[:instance_id] = nil
+      instance[:public_addresses] = 
[InstanceAddress.new("#{instance[:image_id]}.#{instance[:id]}.public.com", 
:type => :hostname)]
+      @client.store(:addresses, address)
+      @client.store(:instances, instance)
+    end
+
     #--
     # Buckets
     #--
@@ -530,6 +573,17 @@ module Deltacloud::Drivers::Mock
       end
     end
 
+    #Mock allocation of 'new' address
+    #There is a synchronization problem (but it's the mock driver,
+    #mutex seemed overkill)
+    def allocate_mock_address
+      addresses = []
+      @client.members(:addresses).each do |addr|
+        addresses << IPAddr.new("#{addr}").to_i
+      end
+      IPAddr.new(addresses.sort.pop+1, Socket::AF_INET)
+    end
+
     def attach_volume_instance(volume_id, device, instance_id)
       volume = @client.load(:storage_volumes, volume_id)
       instance = @client.load(:instances, instance_id)
@@ -597,6 +651,14 @@ module Deltacloud::Drivers::Mock
         message "Key with same name already exists"
       end
 
+      on /AddressInUse/ do
+        status 403
+      end
+
+      on /AddressNotInUse/ do
+        status 403
+      end
+
       on /BucketNotExist/ do
         status 404
       end
-- 
1.7.11.4

Reply via email to