cc1  v2.1
CC1 source code docs
 All Classes Namespaces Files Functions Variables Pages
address_test.py
Go to the documentation of this file.
1 # -*- coding: utf-8 -*-
2 # @COPYRIGHT_begin
3 #
4 # Copyright [2010-2014] Institute of Nuclear Physics PAN, Krakow, Poland
5 #
6 # Licensed under the Apache License, Version 2.0 (the "License");
7 # you may not use this file except in compliance with the License.
8 # You may obtain a copy of the License at
9 #
10 # http://www.apache.org/licenses/LICENSE-2.0
11 #
12 # Unless required by applicable law or agreed to in writing, software
13 # distributed under the License is distributed on an "AS IS" BASIS,
14 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 # See the License for the specific language governing permissions and
16 # limitations under the License.
17 #
18 # @COPYRIGHT_end
19 
20 ##
21 # @package src.ec2.address_test
22 #
23 # @author Oleksandr Gituliar <gituliar@gmail.com>
24 # @copyright Copyright (c) 2012 Institute of Nuclear Physics PAS <http://www.ifj.edu.pl/>
25 #
26 
27 from __future__ import with_statement
28 
29 from ec2.base.action import Action
30 from ec2.error import AuthFailure, UndefinedError
31 from ec2.base.test import TestCase
32 
33 
34 class AddressTestCase(TestCase):
35 
37  self.cluster_manager.elasticip.user.request.return_value = {
38  'ip': '1.1.0.1',
39  }
40 
41  action = Action({'Action': 'AllocateAddress'}, self.cluster_manager)
42  response = action.execute()
43 
44  self.assertMultiLineEqual(
45  response,
46  """<?xml version="1.0" encoding="UTF-8"?>
47  <AllocateAddressResponse xmlns="http://ec2.amazonaws.com/doc/2012-03-01/">
48  <requestId>59dbff89-35bd-4eac-99ed-be587EXAMPLE</requestId>
49  <publicIp>1.1.0.1</publicIp>
50  <domain>standard</domain>
51  </AllocateAddressResponse>
52  """
53  )
54 
56  self.cluster_manager.elasticip.user.assign.return_value = None
57  self.cluster_manager.elasticip.user.list.return_value = [
58  {'ip_id': 1, 'vm_id': 1, 'ip': '1.1.0.1'},
59  {'ip_id': 2, 'vm_id': None, 'ip': '1.1.0.2'},
60  ]
61 
62  action = Action({
63  'Action': 'AssociateAddress',
64  'InstanceId': 2,
65  'PublicIp': '1.1.0.2',
66  }, self.cluster_manager)
67  response = action.execute()
68 
69  self.assertMultiLineEqual(
70  response,
71  """<?xml version="1.0" encoding="UTF-8"?>
72  <AssociateAddressResponse xmlns="http://ec2.amazonaws.com/doc/2012-03-01/">
73  <requestId>59dbff89-35bd-4eac-99ed-be587EXAMPLE</requestId>
74  <return>true</return>
75  </AssociateAddressResponse>
76  """
77  )
78 
79  with self.assertRaises(AuthFailure):
80  action = Action({
81  'Action': 'AssociateAddress',
82  'InstanceId': 2,
83  'PublicIp': '1.1.0.3'
84  }, self.cluster_manager)
85  response = action.execute()
86 
88  self.cluster_manager.elasticip.user.list.return_value = [
89  {'vm_id': 1, 'ip': '192.168.0.1'},
90  {'vm_id': None, 'ip': '192.168.0.2'},
91  ]
92 
93  action = Action({'Action': 'DescribeAddresses'}, self.cluster_manager)
94  response = action.execute()
95 
96  self.assertMultiLineEqual(
97  response,
98  """<?xml version="1.0" encoding="UTF-8"?>
99  <DescribeAddressesResponse xmlns="http://ec2.amazonaws.com/doc/2012-03-01/">
100  <requestId>a13c7c2e-4106-459d-a728-9d38bcbab9bf</requestId>
101  <addressesSet>
102  <item>
103  <publicIp>192.168.0.1</publicIp>
104  <domain>standard</domain>
105  <instanceId>1</instanceId>
106  </item>
107  <item>
108  <publicIp>192.168.0.2</publicIp>
109  <domain>standard</domain>
110  <instanceId>None</instanceId>
111  </item>
112  </addressesSet>
113  </DescribeAddressesResponse>
114  """
115  )
116 
118  self.cluster_manager.elasticip.user.unassign.return_value = None
119  self.cluster_manager.elasticip.user.list.return_value = [
120  {'ip_id': 1, 'vm_id': 1, 'ip': '1.1.0.1'},
121  {'ip_id': 2, 'vm_id': None, 'ip': '1.1.0.2'},
122  ]
123 
124  action = Action({
125  'Action': 'DisassociateAddress',
126  'PublicIp': '1.1.0.1'
127  }, self.cluster_manager)
128  response = action.execute()
129 
130  self.assertMultiLineEqual(
131  response,
132  """<?xml version="1.0" encoding="UTF-8"?>
133  <DisassociateAddressResponse xmlns="http://ec2.amazonaws.com/doc/2012-03-01/">
134  <requestId>59dbff89-35bd-4eac-99ed-be587EXAMPLE</requestId>
135  <return>true</return>
136  </DisassociateAddressResponse>
137  """
138  )
139 
140  with self.assertRaises(UndefinedError):
141  response = Action({
142  'Action': 'DisassociateAddress',
143  'PublicIp': '1.1.0.2'
144  }, self.cluster_manager).execute()
145 
146  with self.assertRaises(UndefinedError):
147  response = Action({
148  'Action': 'DisassociateAddress',
149  'PublicIp': '1.1.0.3'
150  }, self.cluster_manager).execute()
151 
153  self.cluster_manager.elasticip.user.list.return_value = [
154  {'ip_id': 1, 'vm_id': 1, 'ip': '1.1.0.1'},
155  {'ip_id': 2, 'vm_id': None, 'ip': '1.1.0.2'},
156  ]
157  self.cluster_manager.elasticip.user.release.return_value = {
158  'status': 'ok',
159  'data': None
160  }
161 
162  response = Action({
163  'Action': 'ReleaseAddress',
164  'PublicIp': '1.1.0.1'
165  }, self.cluster_manager).execute()
166 
167  self.assertMultiLineEqual(
168  response,
169  """<?xml version="1.0" encoding="UTF-8"?>
170  <ReleaseAddressResponse xmlns="http://ec2.amazonaws.com/doc/2012-03-01/">
171  <requestId>59dbff89-35bd-4eac-99ed-be587EXAMPLE</requestId>
172  <return>true</return>
173  </ReleaseAddressResponse>
174  """
175  )
176 
177  with self.assertRaises(AuthFailure):
178  response = Action({
179  'Action': 'ReleaseAddress',
180  'PublicIp': '1.1.0.3'
181  }, self.cluster_manager).execute()
182