chef-vpc-toolkit 2.1.0 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,108 @@
1
+ require File.dirname(__FILE__) + '/test_helper'
2
+
3
+ module ChefVPCToolkit
4
+ module CloudServersVPC
5
+
6
+ class ClientTest < Test::Unit::TestCase
7
+
8
+ include ChefVPCToolkit::CloudServersVPC
9
+
10
+ def setup
11
+ @tmp_dir=TmpDir.new_tmp_dir
12
+ Client.data_dir=@tmp_dir
13
+ end
14
+
15
+ def teardown
16
+ FileUtils.rm_rf(@tmp_dir)
17
+ end
18
+
19
+ def test_new
20
+ client=Client.new(:name => "test", :description => "zz", :status => "Pending")
21
+ assert_equal "test", client.name
22
+ assert_equal "zz", client.description
23
+ assert_equal 0, client.vpn_network_interfaces.size
24
+ end
25
+
26
+ def test_from_xml
27
+ client=Client.from_xml(CLIENT_XML)
28
+ assert_equal "local", client.name
29
+ assert_equal "Toolkit Client: local", client.description
30
+ assert_equal 5, client.id
31
+ assert_equal 11, client.server_group_id
32
+ vni=client.vpn_network_interfaces[0]
33
+ assert_not_nil vni.client_key
34
+ assert_not_nil vni.client_cert
35
+ assert_not_nil vni.ca_cert
36
+ end
37
+
38
+ def test_client_to_and_from_xml
39
+ client=Client.from_xml(CLIENT_XML)
40
+ xml=client.to_xml
41
+ assert_not_nil xml
42
+ client=Client.from_xml(xml)
43
+ assert_equal "local", client.name
44
+ assert_equal "Toolkit Client: local", client.description
45
+ assert_equal 5, client.id
46
+ assert_equal 11, client.server_group_id
47
+ vni=client.vpn_network_interfaces[0]
48
+ assert_not_nil vni.client_key
49
+ assert_not_nil vni.client_cert
50
+ assert_not_nil vni.ca_cert
51
+ end
52
+
53
+ def test_fetch
54
+
55
+ tmp_dir=TmpDir.new_tmp_dir
56
+ File.open("#{tmp_dir}/5.xml", 'w') do |f|
57
+ f.write(CLIENT_XML)
58
+ end
59
+ Client.data_dir=tmp_dir
60
+
61
+ Connection.stubs(:get).returns(CLIENT_XML)
62
+
63
+ # should raise exception if no ID is set and doing a remote lookup
64
+ assert_raises(RuntimeError) do
65
+ Client.fetch
66
+ end
67
+
68
+ client=Client.fetch(:id => "1234")
69
+ assert_not_nil client
70
+ assert_equal "Toolkit Client: local", client.description
71
+
72
+ client=Client.fetch(:id => "5", :source => "cache")
73
+ assert_not_nil client
74
+ assert_equal "Toolkit Client: local", client.description
75
+
76
+ #nonexistent group from cache
77
+ ENV['GROUP_ID']="1234"
78
+ assert_raises(RuntimeError) do
79
+ Client.fetch(:source => "cache")
80
+ end
81
+
82
+ #invalid fetch source
83
+ assert_raises(RuntimeError) do
84
+ Client.fetch(:id => "5", :source => "asdf")
85
+ end
86
+
87
+ end
88
+
89
+ def test_delete
90
+
91
+ client=Client.from_xml(CLIENT_XML)
92
+ client.delete
93
+ assert_equal false, File.exists?(File.join(Client.data_dir, "#{client.id}.xml"))
94
+
95
+ end
96
+
97
+ def test_create
98
+
99
+ Connection.stubs(:post).returns(CLIENT_XML)
100
+ client=Client.create(ServerGroup.from_xml(SERVER_GROUP_XML), "local")
101
+ assert_equal "local", client.name
102
+
103
+ end
104
+
105
+ end
106
+
107
+ end
108
+ end
@@ -0,0 +1,259 @@
1
+ require File.dirname(__FILE__) + '/test_helper'
2
+
3
+ require 'fileutils'
4
+ require 'tempfile'
5
+
6
+ module ChefVPCToolkit
7
+ module CloudServersVPC
8
+
9
+ class ServerGroupTest < Test::Unit::TestCase
10
+
11
+ def setup
12
+ @tmp_dir=TmpDir.new_tmp_dir
13
+ ServerGroup.data_dir=@tmp_dir
14
+ end
15
+
16
+ def teardown
17
+ FileUtils.rm_rf(@tmp_dir)
18
+ end
19
+
20
+ TEST_JSON_CONFIG = %{{
21
+ "name": "test",
22
+ "domain_name": "vpc",
23
+ "description": "test description",
24
+ "servers": {
25
+ "login": {
26
+ "image_id": "51",
27
+ "flavor_id": "2",
28
+ "openvpn_server": "true"
29
+ },
30
+ "client1": {
31
+ "image_id": "69",
32
+ "flavor_id": "3"
33
+ }
34
+ }
35
+ }}
36
+
37
+ def test_server_new
38
+ sg=ServerGroup.new(:name => "test", :domain_name => "vpc", :description => "zz")
39
+ assert_equal "test", sg.name
40
+ assert_equal "zz", sg.description
41
+ assert_equal "vpc", sg.domain_name
42
+ assert_equal "172.19.0.0", sg.vpn_network
43
+ assert_equal "255.255.128.0", sg.vpn_subnet
44
+ end
45
+
46
+ def test_vpn_gateway_ip
47
+ sg=ServerGroup.from_xml(SERVER_GROUP_XML)
48
+ assert_equal "184.106.205.120", sg.vpn_gateway_ip
49
+ assert_equal 1759, sg.id
50
+ assert_equal "test description", sg.description
51
+ assert_equal "dan.prince", sg.owner_name
52
+ assert_equal "172.19.0.0", sg.vpn_network
53
+ assert_equal "255.255.128.0", sg.vpn_subnet
54
+ assert_equal 2, sg.servers.size
55
+ end
56
+
57
+ def test_vpn_gateway_name
58
+ sg=ServerGroup.from_xml(SERVER_GROUP_XML)
59
+ assert_equal "login1", sg.vpn_gateway_name
60
+ end
61
+
62
+ def test_server_group_from_json_config
63
+ sg=ServerGroup.from_json_config(TEST_JSON_CONFIG)
64
+ assert_equal "vpc", sg.domain_name
65
+ assert_equal "test", sg.name
66
+ assert_equal "test description", sg.description
67
+ assert_equal 2, sg.servers.size
68
+ assert_equal 1, sg.ssh_public_keys.size
69
+
70
+ # validate the login server
71
+ login_server=sg.server("login")
72
+ assert_equal 51, login_server.image_id
73
+ assert_equal 2, login_server.flavor_id
74
+ assert_equal true, login_server.openvpn_server?
75
+
76
+ # validate the client1 server
77
+ client1_server=sg.server("client1")
78
+ assert_equal 69, client1_server.image_id
79
+ assert_equal 3, client1_server.flavor_id
80
+ assert_equal false, client1_server.openvpn_server?
81
+
82
+ end
83
+
84
+ def test_server_group_from_xml
85
+ sg=ServerGroup.from_xml(SERVER_GROUP_XML)
86
+ assert_equal "mydomain.net", sg.domain_name
87
+ assert_equal "test", sg.name
88
+ assert_equal "test description", sg.description
89
+ assert_equal 2, sg.servers.size
90
+ assert_equal 1759, sg.id
91
+ end
92
+
93
+ def test_server_group_to_xml
94
+ sg=ServerGroup.from_xml(SERVER_GROUP_XML)
95
+ assert_equal "mydomain.net", sg.domain_name
96
+ assert_equal "test", sg.name
97
+ assert_equal "test description", sg.description
98
+ assert_equal 2, sg.servers.size
99
+ assert_equal 1759, sg.id
100
+ xml=sg.to_xml
101
+ end
102
+
103
+ def test_print_server_group
104
+
105
+ sg=ServerGroup.from_xml(SERVER_GROUP_XML)
106
+ tmp = Tempfile.open('chef-cloud-toolkit')
107
+ begin
108
+ $stdout = tmp
109
+ sg.pretty_print
110
+ tmp.flush
111
+ output=IO.read(tmp.path)
112
+ $stdout = STDOUT
113
+ assert output =~ /login1/
114
+ assert output =~ /test1/
115
+ assert output =~ /184.106.205.120/
116
+ ensure
117
+ $stdout = STDOUT
118
+ end
119
+
120
+ end
121
+
122
+ def test_server_names
123
+
124
+ sg=ServerGroup.from_xml(SERVER_GROUP_XML)
125
+ names=sg.server_names
126
+
127
+ assert_equal 2, names.size
128
+ assert names.include?("login1")
129
+ assert names.include?("test1")
130
+
131
+ end
132
+
133
+ def test_fetch
134
+
135
+ tmp_dir=TmpDir.new_tmp_dir
136
+ File.open("#{tmp_dir}/5.xml", 'w') do |f|
137
+ f.write(SERVER_GROUP_XML)
138
+ end
139
+ ServerGroup.data_dir=tmp_dir
140
+
141
+ Connection.stubs(:get).returns(SERVER_GROUP_XML)
142
+
143
+ sg=ServerGroup.fetch
144
+ assert_not_nil sg
145
+ assert_equal "test", sg.name
146
+
147
+ sg=ServerGroup.fetch(:id => "1234")
148
+ assert_not_nil sg
149
+ assert_equal "test", sg.name
150
+
151
+ sg=ServerGroup.fetch(:id => "5", :source => "cache")
152
+ assert_not_nil sg
153
+ assert_equal "test", sg.name
154
+
155
+ #nonexistent group from cache
156
+ ENV['GROUP_ID']="1234"
157
+ assert_raises(RuntimeError) do
158
+ ServerGroup.fetch(:source => "cache")
159
+ end
160
+
161
+ #invalid fetch source
162
+ assert_raises(RuntimeError) do
163
+ ServerGroup.fetch(:id => "5", :source => "asdf")
164
+ end
165
+
166
+ end
167
+
168
+ def test_list_from_cache
169
+
170
+ tmp_dir=TmpDir.new_tmp_dir
171
+ File.open("#{tmp_dir}/1759.xml", 'w') do |f|
172
+ f.write(SERVER_GROUP_XML)
173
+ end
174
+ ServerGroup.data_dir=tmp_dir
175
+
176
+ server_groups = ServerGroup.list
177
+
178
+ assert_equal 1, server_groups.size
179
+ assert_equal 1759, server_groups[0].id
180
+
181
+ end
182
+
183
+ def test_list_from_remote
184
+
185
+ tmp_dir=TmpDir.new_tmp_dir
186
+ File.open("#{tmp_dir}/1759.xml", 'w') do |f|
187
+ f.write(SERVER_GROUP_XML)
188
+ end
189
+ ServerGroup.data_dir=tmp_dir
190
+
191
+ Connection.stubs(:get).returns(SERVER_GROUP_XML)
192
+ server_groups = ServerGroup.list(:source => "remote")
193
+
194
+ assert_equal 1, server_groups.size
195
+ assert_equal 1759, server_groups[0].id
196
+
197
+ end
198
+
199
+ def test_create
200
+
201
+ sg=ServerGroup.from_json_config(TEST_JSON_CONFIG)
202
+
203
+ Connection.stubs(:post).returns(SERVER_GROUP_XML)
204
+ sg=ServerGroup.create(sg)
205
+ assert_not_nil sg
206
+ assert_equal "mydomain.net", sg.domain_name
207
+ assert_equal "test", sg.name
208
+ assert_equal "test description", sg.description
209
+ assert_equal 2, sg.servers.size
210
+ assert_equal 1759, sg.id
211
+
212
+ end
213
+
214
+ def test_most_recent
215
+
216
+ File.open("#{ServerGroup.data_dir}/5.xml", 'w') do |f|
217
+ f.write(SERVER_GROUP_XML)
218
+ end
219
+
220
+ sg=ServerGroup.most_recent
221
+
222
+ assert_equal "mydomain.net", sg.domain_name
223
+ assert_equal 1759, sg.id
224
+ assert_equal 2, sg.servers.size
225
+
226
+ end
227
+
228
+ def test_os_types
229
+
230
+ sg=ServerGroup.from_xml(SERVER_GROUP_XML)
231
+ os_types=sg.os_types
232
+
233
+ assert_equal 2, os_types.size
234
+ assert_equal "rhel", os_types["login1"]
235
+ assert_equal "ubuntu", os_types["test1"]
236
+
237
+ end
238
+
239
+ def test_cache_to_disk
240
+
241
+ sg=ServerGroup.from_xml(SERVER_GROUP_XML)
242
+ assert sg.cache_to_disk
243
+ assert File.exists?(File.join(ServerGroup.data_dir, "#{sg.id}.xml"))
244
+
245
+ end
246
+
247
+ def test_delete
248
+
249
+ sg=ServerGroup.from_xml(SERVER_GROUP_XML)
250
+ Connection.stubs(:delete).returns("")
251
+ sg.delete
252
+ assert_equal false, File.exists?(File.join(ServerGroup.data_dir, "#{sg.id}.xml"))
253
+
254
+ end
255
+
256
+ end
257
+
258
+ end
259
+ end
@@ -0,0 +1,66 @@
1
+ require File.dirname(__FILE__) + '/test_helper'
2
+
3
+ module ChefVPCToolkit
4
+ module CloudServersVPC
5
+
6
+ class ServerTest < Test::Unit::TestCase
7
+
8
+ include ChefVPCToolkit::CloudServersVPC
9
+
10
+ def setup
11
+ @tmp_dir=TmpDir.new_tmp_dir
12
+ ServerGroup.data_dir=@tmp_dir
13
+ end
14
+
15
+ def teardown
16
+ FileUtils.rm_rf(@tmp_dir)
17
+ end
18
+
19
+ def test_vpn_server_rebuild_fails
20
+ group=ServerGroup.from_xml(SERVER_GROUP_XML)
21
+ server=group.server("login1")
22
+ assert_raises(RuntimeError) do
23
+ server.rebuild
24
+ end
25
+ end
26
+
27
+ def test_rebuild
28
+ group=ServerGroup.from_xml(SERVER_GROUP_XML)
29
+ server=group.server("test1")
30
+ Connection.stubs(:post).returns("")
31
+ server.rebuild
32
+ end
33
+
34
+ def test_from_to_xml
35
+ server=Server.from_xml(SERVER_XML)
36
+ server=Server.from_xml(server.to_xml)
37
+ assert_equal "db1", server.name
38
+ assert_equal "blah", server.description
39
+ assert_equal 1234, server.id
40
+ assert_equal 888, server.cloud_server_id_number
41
+ assert_equal 999, server.server_group_id
42
+ assert_equal "10.119.225.116", server.internal_ip_addr
43
+ assert_equal "123.100.100.100", server.external_ip_addr
44
+ assert_equal "Online", server.status
45
+ end
46
+
47
+ def test_create
48
+
49
+ Connection.stubs(:post).returns(SERVER_XML)
50
+ server=Server.create(Server.from_xml(SERVER_XML))
51
+ assert_equal "db1", server.name
52
+
53
+ end
54
+
55
+ def test_delete
56
+
57
+ server=Server.from_xml(SERVER_XML)
58
+ Connection.stubs(:delete).returns("")
59
+ assert server.delete
60
+
61
+ end
62
+
63
+ end
64
+
65
+ end
66
+ end
data/test/test_helper.rb CHANGED
@@ -172,3 +172,24 @@ QRiYX+gvycrIph1yyIGA1qeHYnjhQp4ZijhcwSFUAAyF
172
172
  </vpn-network-interfaces>
173
173
  </client>
174
174
  }
175
+
176
+ SERVER_XML = %{
177
+
178
+ <linux-server>
179
+ <cloud-server-id-number type="integer">888</cloud-server-id-number>
180
+ <created-at type="datetime">2010-07-29T10:27:33-04:00</created-at>
181
+ <description>blah</description>
182
+ <error-message nil="true"></error-message>
183
+ <external-ip-addr>123.100.100.100</external-ip-addr>
184
+ <flavor-id type="integer">3</flavor-id>
185
+ <id type="integer">1234</id>
186
+ <image-id type="integer">14</image-id>
187
+ <internal-ip-addr>10.119.225.116</internal-ip-addr>
188
+ <name>db1</name>
189
+ <openvpn-server type="boolean">false</openvpn-server>
190
+ <retry-count type="integer">0</retry-count>
191
+ <server-group-id type="integer">999</server-group-id>
192
+ <status>Online</status>
193
+ <updated-at type="datetime">2010-07-29T11:19:04-04:00</updated-at>
194
+ </linux-server>
195
+ }