tengine_resource 0.5.13

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.
Files changed (100) hide show
  1. data/.document +5 -0
  2. data/.rspec +1 -0
  3. data/Gemfile +30 -0
  4. data/Gemfile.lock +106 -0
  5. data/README.rdoc +20 -0
  6. data/Rakefile +42 -0
  7. data/VERSION +1 -0
  8. data/bin/tengine_resource_watchd +8 -0
  9. data/config/.gitignore +2 -0
  10. data/config/watchd.yml.erb.example +52 -0
  11. data/lib/tengine/resource.rb +29 -0
  12. data/lib/tengine/resource/config.rb +6 -0
  13. data/lib/tengine/resource/config/resource.rb +194 -0
  14. data/lib/tengine/resource/credential.rb +156 -0
  15. data/lib/tengine/resource/credential/ec2.rb +5 -0
  16. data/lib/tengine/resource/credential/ec2/dummy.rb +148 -0
  17. data/lib/tengine/resource/credential/ec2/launch_options.rb +179 -0
  18. data/lib/tengine/resource/drivers/resource_control_driver.rb +58 -0
  19. data/lib/tengine/resource/net_ssh.rb +134 -0
  20. data/lib/tengine/resource/observer.rb +25 -0
  21. data/lib/tengine/resource/physical_server.rb +7 -0
  22. data/lib/tengine/resource/provider.rb +82 -0
  23. data/lib/tengine/resource/provider/ec2.rb +187 -0
  24. data/lib/tengine/resource/provider/wakame.rb +615 -0
  25. data/lib/tengine/resource/server.rb +62 -0
  26. data/lib/tengine/resource/virtual_server.rb +62 -0
  27. data/lib/tengine/resource/virtual_server_image.rb +34 -0
  28. data/lib/tengine/resource/virtual_server_type.rb +21 -0
  29. data/lib/tengine/resource/watcher.rb +121 -0
  30. data/lib/tengine_resource.rb +4 -0
  31. data/spec/fixtures/goku_at_ec2_ap_northeast.rb +177 -0
  32. data/spec/mongoid.yml +35 -0
  33. data/spec/spec_helper.rb +40 -0
  34. data/spec/support/ec2.rb +129 -0
  35. data/spec/support/mongo_index_key_log.rb +91 -0
  36. data/spec/tengine/resource/bugfix/watcher_for_wakame_spec.rb +232 -0
  37. data/spec/tengine/resource/credential_spec.rb +205 -0
  38. data/spec/tengine/resource/drivers/resource_control_driver_spec.rb +84 -0
  39. data/spec/tengine/resource/net_ssh_spec.rb +148 -0
  40. data/spec/tengine/resource/physical_server_spec.rb +47 -0
  41. data/spec/tengine/resource/provider/ec2_spec.rb +473 -0
  42. data/spec/tengine/resource/provider/test_files/describe_host_nodes.json +22 -0
  43. data/spec/tengine/resource/provider/test_files/describe_images.json +23 -0
  44. data/spec/tengine/resource/provider/test_files/describe_instance_specs.json +23 -0
  45. data/spec/tengine/resource/provider/test_files/describe_instances.json +56 -0
  46. data/spec/tengine/resource/provider/test_files/run_instances.json +30 -0
  47. data/spec/tengine/resource/provider/test_files/terminate_instances.json +3 -0
  48. data/spec/tengine/resource/provider/wakame/00_describe_host_nodes_0_physical_servers.json +8 -0
  49. data/spec/tengine/resource/provider/wakame/01_describe_host_nodes_10_physical_servers.json +139 -0
  50. data/spec/tengine/resource/provider/wakame/02_describe_host_nodes_60_physical_servers.json +795 -0
  51. data/spec/tengine/resource/provider/wakame/10_describe_instances_0_virtual_servers.json +8 -0
  52. data/spec/tengine/resource/provider/wakame/11_describe_instances_10_virtual_servers.json +469 -0
  53. data/spec/tengine/resource/provider/wakame/12_describe_instances_after_run_instances.json +280 -0
  54. data/spec/tengine/resource/provider/wakame/13_describe_instances_after_terminate_instances.json +279 -0
  55. data/spec/tengine/resource/provider/wakame/20_describe_images_0_virtual_server_images.json +8 -0
  56. data/spec/tengine/resource/provider/wakame/21_describe_images_5_virtual_server_images.json +84 -0
  57. data/spec/tengine/resource/provider/wakame/22_describe_images_60_virtual_server_images.json +856 -0
  58. data/spec/tengine/resource/provider/wakame/30_describe_instance_specs_0_virtual_server_specs.json +8 -0
  59. data/spec/tengine/resource/provider/wakame/31_describe_instance_specs_4_virtual_server_specs.json +66 -0
  60. data/spec/tengine/resource/provider/wakame/40_run_instances_0_virtual_servers.json +1 -0
  61. data/spec/tengine/resource/provider/wakame/41_run_instances_1_virtual_servers.json +22 -0
  62. data/spec/tengine/resource/provider/wakame/42_run_instances_5_virtual_servers.json +106 -0
  63. data/spec/tengine/resource/provider/wakame/50_terminate_instances_0_virtual_servers.json +1 -0
  64. data/spec/tengine/resource/provider/wakame/51_terminate_instances_3_virtual_servers.json +5 -0
  65. data/spec/tengine/resource/provider/wakame/sync_physical_servers_spec.rb +114 -0
  66. data/spec/tengine/resource/provider/wakame/sync_virtual_server_images_spec.rb +116 -0
  67. data/spec/tengine/resource/provider/wakame/sync_virtual_server_types_spec.rb +116 -0
  68. data/spec/tengine/resource/provider/wakame/sync_virtual_servers_spec.rb +216 -0
  69. data/spec/tengine/resource/provider/wakame_api_spec.rb +319 -0
  70. data/spec/tengine/resource/provider/wakame_spec.rb +339 -0
  71. data/spec/tengine/resource/provider_spec.rb +252 -0
  72. data/spec/tengine/resource/server_spec.rb +195 -0
  73. data/spec/tengine/resource/test_files/.gitignore +6 -0
  74. data/spec/tengine/resource/test_files/00_describe_host_nodes_0_physical_servers.json +8 -0
  75. data/spec/tengine/resource/test_files/01_describe_host_nodes_10_physical_servers.json +139 -0
  76. data/spec/tengine/resource/test_files/02_describe_host_nodes_60_physical_servers.json +795 -0
  77. data/spec/tengine/resource/test_files/10_describe_instances_0_virtual_servers.json +8 -0
  78. data/spec/tengine/resource/test_files/11_describe_instances_10_virtual_servers.json +469 -0
  79. data/spec/tengine/resource/test_files/12_describe_instances_after_run_instances.json +280 -0
  80. data/spec/tengine/resource/test_files/13_describe_instances_after_terminate_instances.json +279 -0
  81. data/spec/tengine/resource/test_files/14_describe_instances_after_run_1_instance.json +55 -0
  82. data/spec/tengine/resource/test_files/20_describe_images_0_virtual_server_images.json +8 -0
  83. data/spec/tengine/resource/test_files/21_describe_images_5_virtual_server_images.json +84 -0
  84. data/spec/tengine/resource/test_files/22_describe_images_60_virtual_server_images.json +856 -0
  85. data/spec/tengine/resource/test_files/30_describe_instance_specs_0_virtual_server_specs.json +8 -0
  86. data/spec/tengine/resource/test_files/31_describe_instance_specs_4_virtual_server_specs.json +66 -0
  87. data/spec/tengine/resource/test_files/40_run_instances_0_virtual_servers.json +1 -0
  88. data/spec/tengine/resource/test_files/41_run_instances_1_virtual_servers.json +22 -0
  89. data/spec/tengine/resource/test_files/42_run_instances_5_virtual_servers.json +106 -0
  90. data/spec/tengine/resource/test_files/43_run_instances_1_virtual_servers_without_aws_availability_zone.json +22 -0
  91. data/spec/tengine/resource/test_files/50_terminate_instances_0_virtual_servers.json +1 -0
  92. data/spec/tengine/resource/test_files/51_terminate_instances_3_virtual_servers.json +5 -0
  93. data/spec/tengine/resource/virtual_server_image_spec.rb +94 -0
  94. data/spec/tengine/resource/virtual_server_spec.rb +116 -0
  95. data/spec/tengine/resource/virtual_server_type_spec.rb +4 -0
  96. data/spec/tengine/resource/watcher_spec.rb +1026 -0
  97. data/spec/tengine_resource_spec.rb +5 -0
  98. data/tengine_resource.gemspec +171 -0
  99. data/tmp/log/.gitignore +1 -0
  100. metadata +286 -0
@@ -0,0 +1,8 @@
1
+ [
2
+ {
3
+ "owner_total": 0,
4
+ "start": 0,
5
+ "results": [],
6
+ "limit": null
7
+ }
8
+ ]
@@ -0,0 +1,66 @@
1
+ [
2
+ {
3
+ "owner_total": 2,
4
+ "start": 0,
5
+ "results": [
6
+ {
7
+ "id": "virtual_server_spec_id_01",
8
+ "uuid": "virtual_server_spec_name_01",
9
+ "cpu_cores": 1,
10
+ "memory_size": 256,
11
+ "arch": "x86_64",
12
+ "hypervisor": "kvm",
13
+ "updated_at": "2011-10-28T02:58:57Z",
14
+ "account_id": "a-shpoolxx",
15
+ "vifs": "--- \neth0: \n :bandwidth: 100000\n :index: 0\n",
16
+ "quota_weight": 1.0,
17
+ "created_at": "2011-10-28T02:58:57Z",
18
+ "drives": "--- \nephemeral1: \n :type: :local\n :size: 100\n :index: 0\n"
19
+ },
20
+ {
21
+ "id": "virtual_server_spec_id_02",
22
+ "uuid": "virtual_server_spec_name_02",
23
+ "cpu_cores": 2,
24
+ "memory_size": 512,
25
+ "arch": "x86_64",
26
+ "hypervisor": "kvm",
27
+ "updated_at": "2011-10-28T02:58:57Z",
28
+ "account_id": "a-shpoolxx",
29
+ "vifs": "--- \neth0: \n :bandwidth: 100000\n :index: 0\n",
30
+ "quota_weight": 1.0,
31
+ "created_at": "2011-10-28T02:58:57Z",
32
+ "drives": "--- \nephemeral1: \n :type: :local\n :size: 100\n :index: 0\n"
33
+ },
34
+ {
35
+ "id": "virtual_server_spec_id_03",
36
+ "uuid": "virtual_server_spec_name_03",
37
+ "cpu_cores": 5,
38
+ "memory_size": 1,
39
+ "arch": "x86_64",
40
+ "hypervisor": "kvm",
41
+ "updated_at": "2011-10-28T02:58:57Z",
42
+ "account_id": "a-shpoolxx",
43
+ "vifs": "--- \neth0: \n :bandwidth: 100000\n :index: 0\n",
44
+ "quota_weight": 1.0,
45
+ "created_at": "2011-10-28T02:58:57Z",
46
+ "drives": "--- \nephemeral1: \n :type: :local\n :size: 100\n :index: 0\n"
47
+ },
48
+ {
49
+ "id": "virtual_server_spec_id_04",
50
+ "uuid": "virtual_server_spec_name_04",
51
+ "cpu_cores": 1,
52
+ "memory_size": 1500,
53
+ "arch": "x86_64",
54
+ "hypervisor": "kvm",
55
+ "updated_at": "2011-10-28T02:58:57Z",
56
+ "account_id": "a-shpoolxx",
57
+ "vifs": "--- \neth0: \n :bandwidth: 100000\n :index: 0\n",
58
+ "quota_weight": 1.0,
59
+ "created_at": "2011-10-28T02:58:57Z",
60
+ "drives": "--- \nephemeral1: \n :type: :local\n :size: 100\n :index: 0\n"
61
+ }
62
+
63
+ ],
64
+ "limit": null
65
+ }
66
+ ]
@@ -0,0 +1,22 @@
1
+ [
2
+ {
3
+ "id": "virtual_server_id_91",
4
+ "state": "scheduling",
5
+ "image_id": "vertual_server_iamge_id_01",
6
+ "hostname": "physical_server_name_01",
7
+ "instance_spec_id": "virtual_server_spec_id_01",
8
+ "vif": [],
9
+ "status": "init",
10
+ "memory_size": 256,
11
+ "ha_enabled": 0,
12
+ "network": [],
13
+ "arch": "x86_64",
14
+ "host_node": null,
15
+ "created_at": "2011-10-18T06:48:47Z",
16
+ "netfilter_group_id": ["ng-demofgr"],
17
+ "ssh_key_pair": null,
18
+ "volume": [],
19
+ "netfilter_group": ["default"],
20
+ "cpu_cores": 1
21
+ }
22
+ ]
@@ -0,0 +1,106 @@
1
+ [
2
+ {
3
+ "id": "virtual_server_id_92",
4
+ "state": "scheduling",
5
+ "image_id": "vertual_server_iamge_id_01",
6
+ "hostname": "physical_server_name_01",
7
+ "instance_spec_id": "virtual_server_spec_id_01",
8
+ "vif": [],
9
+ "status": "init",
10
+ "memory_size": 256,
11
+ "ha_enabled": 0,
12
+ "network": [],
13
+ "arch": "x86_64",
14
+ "host_node": null,
15
+ "created_at": "2011-10-18T06:48:47Z",
16
+ "netfilter_group_id": ["ng-demofgr"],
17
+ "ssh_key_pair": null,
18
+ "volume": [],
19
+ "netfilter_group": ["default"],
20
+ "cpu_cores": 1
21
+ },
22
+
23
+ {
24
+ "id": "virtual_server_id_93",
25
+ "state": "scheduling",
26
+ "image_id": "vertual_server_iamge_id_01",
27
+ "hostname": "physical_server_name_01",
28
+ "instance_spec_id": "virtual_server_spec_id_01",
29
+ "vif": [],
30
+ "status": "init",
31
+ "memory_size": 256,
32
+ "ha_enabled": 0,
33
+ "network": [],
34
+ "arch": "x86_64",
35
+ "host_node": null,
36
+ "created_at": "2011-10-18T06:48:47Z",
37
+ "netfilter_group_id": ["ng-demofgr"],
38
+ "ssh_key_pair": null,
39
+ "volume": [],
40
+ "netfilter_group": ["default"],
41
+ "cpu_cores": 1
42
+ },
43
+
44
+ {
45
+ "id": "virtual_server_id_94",
46
+ "state": "scheduling",
47
+ "image_id": "vertual_server_iamge_id_01",
48
+ "hostname": "physical_server_name_01",
49
+ "instance_spec_id": "virtual_server_spec_id_01",
50
+ "vif": [],
51
+ "status": "init",
52
+ "memory_size": 256,
53
+ "ha_enabled": 0,
54
+ "network": [],
55
+ "arch": "x86_64",
56
+ "host_node": null,
57
+ "created_at": "2011-10-18T06:48:47Z",
58
+ "netfilter_group_id": ["ng-demofgr"],
59
+ "ssh_key_pair": null,
60
+ "volume": [],
61
+ "netfilter_group": ["default"],
62
+ "cpu_cores": 1
63
+ },
64
+
65
+ {
66
+ "id": "virtual_server_id_95",
67
+ "state": "scheduling",
68
+ "image_id": "vertual_server_iamge_id_01",
69
+ "hostname": "physical_server_name_01",
70
+ "instance_spec_id": "virtual_server_spec_id_01",
71
+ "vif": [],
72
+ "status": "init",
73
+ "memory_size": 256,
74
+ "ha_enabled": 0,
75
+ "network": [],
76
+ "arch": "x86_64",
77
+ "host_node": null,
78
+ "created_at": "2011-10-18T06:48:47Z",
79
+ "netfilter_group_id": ["ng-demofgr"],
80
+ "ssh_key_pair": null,
81
+ "volume": [],
82
+ "netfilter_group": ["default"],
83
+ "cpu_cores": 1
84
+ },
85
+
86
+ {
87
+ "id": "virtual_server_id_96",
88
+ "state": "scheduling",
89
+ "image_id": "vertual_server_iamge_id_01",
90
+ "hostname": "physical_server_name_01",
91
+ "instance_spec_id": "virtual_server_spec_id_01",
92
+ "vif": [],
93
+ "status": "init",
94
+ "memory_size": 256,
95
+ "ha_enabled": 0,
96
+ "network": [],
97
+ "arch": "x86_64",
98
+ "host_node": null,
99
+ "created_at": "2011-10-18T06:48:47Z",
100
+ "netfilter_group_id": ["ng-demofgr"],
101
+ "ssh_key_pair": null,
102
+ "volume": [],
103
+ "netfilter_group": ["default"],
104
+ "cpu_cores": 1
105
+ }
106
+ ]
@@ -0,0 +1,5 @@
1
+ [
2
+ "virtual_server_id_91",
3
+ "virtual_server_id_92",
4
+ "virtual_server_id_93"
5
+ ]
@@ -0,0 +1,114 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'spec_helper'
3
+
4
+ describe Tengine::Resource::Provider::Wakame do
5
+ subject do
6
+ Tengine::Resource::Provider::Wakame.delete_all
7
+ Tengine::Resource::Provider::Wakame.create!(
8
+ :name => "tama_test_001",
9
+ :connection_settings => { :test => true }
10
+ )
11
+ end
12
+
13
+ context :physical_server_watch do
14
+ def setup_describe_host_node_file(filename)
15
+ subject.connection_settings[:options] = {
16
+ :describe_host_nodes_file => File.expand_path(filename, File.dirname(__FILE__))
17
+ }
18
+ end
19
+
20
+
21
+ context "初期登録時" do
22
+ before{ Tengine::Resource::PhysicalServer.delete_all }
23
+
24
+ context "Wakameが0件返す場合" do
25
+ before{ setup_describe_host_node_file("00_describe_host_nodes_0_physical_servers.json")}
26
+ it "件数は増えない" do
27
+ expect{
28
+ subject.physical_server_watch
29
+ }.to_not change(Tengine::Resource::PhysicalServer, :count)
30
+ end
31
+ end
32
+
33
+ context "Wakameが10件返す場合" do
34
+ before{ setup_describe_host_node_file("01_describe_host_nodes_10_physical_servers.json")}
35
+ it "10件増える" do
36
+ expect{
37
+ subject.physical_server_watch
38
+ }.to change(Tengine::Resource::PhysicalServer, :count).by(10)
39
+ Tengine::Resource::PhysicalServer.all.each do |server|
40
+ server.provided_id.should_not == nil
41
+ server.name.should_not == nil
42
+ server.provider_id.should == subject.id
43
+ end
44
+ end
45
+ end
46
+ end
47
+
48
+ context "10件登録されているとき" do
49
+ context "テスト用JSONと同じIDのデータが登録されている" do
50
+ before do
51
+ Tengine::Resource::PhysicalServer.delete_all
52
+ subject.physical_servers.tap do |servers|
53
+ (1..10).each do |idx|
54
+ servers.create!(:provided_id => "physical_server_id_%02d" % idx, :name => "physical_server_name_%02d" % idx)
55
+ end
56
+ end
57
+ end
58
+
59
+ context "Wakameが0件返す場合" do
60
+ before{ setup_describe_host_node_file("00_describe_host_nodes_0_physical_servers.json")}
61
+ it "10件削除される" do
62
+ expect{
63
+ subject.physical_server_watch
64
+ }.to change(Tengine::Resource::PhysicalServer, :count).by(-10)
65
+ end
66
+ end
67
+
68
+ context "Wakameが同じ10件返す場合" do
69
+ before{ setup_describe_host_node_file("01_describe_host_nodes_10_physical_servers.json")}
70
+ it "件数もデータも変わらず" do
71
+ ids = Tengine::Resource::PhysicalServer.all.map(&:id).map(&:to_s).sort
72
+ expect{
73
+ subject.physical_server_watch
74
+ }.to_not change(Tengine::Resource::PhysicalServer, :count)
75
+ Tengine::Resource::PhysicalServer.all.map(&:id).map(&:to_s).sort.should == ids
76
+ end
77
+ end
78
+ end
79
+
80
+ context "テスト用JSONと異なるIDのデータが登録されている" do
81
+ before do
82
+ Tengine::Resource::PhysicalServer.delete_all
83
+ subject.physical_servers.tap do |servers|
84
+ (11..20).each do |idx|
85
+ servers.create!(:provided_id => "physical_server_id_%02d" % idx, :name => "physical_server_name_%02d" % idx)
86
+ end
87
+ end
88
+ end
89
+
90
+ context "Wakameが0件返す場合" do
91
+ before{ setup_describe_host_node_file("00_describe_host_nodes_0_physical_servers.json")}
92
+ it "10件削除される" do
93
+ expect{
94
+ subject.physical_server_watch
95
+ }.to change(Tengine::Resource::PhysicalServer, :count).by(-10)
96
+ end
97
+ end
98
+
99
+ context "Wakameが同じ10件返す場合" do
100
+ before{ setup_describe_host_node_file("01_describe_host_nodes_10_physical_servers.json")}
101
+ it "件数は変わらないが、データは変わっている" do
102
+ ids = Tengine::Resource::PhysicalServer.all.map(&:id).map(&:to_s).sort
103
+ expect{
104
+ subject.physical_server_watch
105
+ }.to_not change(Tengine::Resource::PhysicalServer, :count)
106
+ Tengine::Resource::PhysicalServer.all.map(&:id).map(&:to_s).sort.should_not == ids
107
+ end
108
+ end
109
+ end
110
+ end
111
+
112
+ end
113
+
114
+ end
@@ -0,0 +1,116 @@
1
+ # -*- coding: utf-8 -*-
2
+ require 'spec_helper'
3
+
4
+ describe Tengine::Resource::Provider::Wakame do
5
+ subject do
6
+ Tengine::Resource::Provider::Wakame.delete_all
7
+ Tengine::Resource::Provider::Wakame.create!(
8
+ :name => "tama_test_001",
9
+ :connection_settings => { :test => true }
10
+ )
11
+ end
12
+
13
+ context :virtual_server_image_watch do
14
+ def setup_describe_images_file(filename)
15
+ subject.connection_settings[:options] = {
16
+ :describe_images_file => File.expand_path(filename, File.dirname(__FILE__))
17
+ }
18
+ end
19
+
20
+
21
+ context "初期登録時" do
22
+ before{ Tengine::Resource::VirtualServerImage.delete_all }
23
+
24
+ context "Wakameが0件返す場合" do
25
+ before{ setup_describe_images_file("20_describe_images_0_virtual_server_images.json")}
26
+ it "件数は増えない" do
27
+ expect{
28
+ subject.virtual_server_image_watch
29
+ }.to_not change(Tengine::Resource::VirtualServerImage, :count)
30
+ end
31
+ end
32
+
33
+ context "Wakameが5件返す場合" do
34
+ before{ setup_describe_images_file("21_describe_images_5_virtual_server_images.json")}
35
+ it "5件増える" do
36
+ expect{
37
+ subject.virtual_server_image_watch
38
+ }.to change(Tengine::Resource::VirtualServerImage, :count).by(5)
39
+ Tengine::Resource::VirtualServerImage.all.each do |server|
40
+ server.provided_id.should_not == nil
41
+ server.name.should_not == nil
42
+ server.provider_id.should == subject.id
43
+ end
44
+ end
45
+ end
46
+ end
47
+
48
+ context "5件登録されているとき" do
49
+ context "テスト用JSONと同じIDのデータが登録されている" do
50
+ before do
51
+ Tengine::Resource::VirtualServerImage.delete_all
52
+ subject.virtual_server_images.tap do |servers|
53
+ (1..5).each do |idx|
54
+ # TODO virtual_server_image_uuid_ ではなくて、 virtual_server_image_id_ では?
55
+ servers.create!(:provided_id => "virtual_server_image_uuid_%02d" % idx, :name => "virtual_server_image_id_%02d" % idx)
56
+ end
57
+ end
58
+ end
59
+
60
+ context "Wakameが0件返す場合" do
61
+ before{ setup_describe_images_file("20_describe_images_0_virtual_server_images.json")}
62
+ it "5件削除される" do
63
+ expect{
64
+ subject.virtual_server_image_watch
65
+ }.to change(Tengine::Resource::VirtualServerImage, :count).by(-5)
66
+ end
67
+ end
68
+
69
+ context "Wakameが同じ5件返す場合" do
70
+ before{ setup_describe_images_file("21_describe_images_5_virtual_server_images.json")}
71
+ it "件数もデータも変わらず" do
72
+ ids = Tengine::Resource::VirtualServerImage.all.map(&:id).map(&:to_s).sort
73
+ expect{
74
+ subject.virtual_server_image_watch
75
+ }.to_not change(Tengine::Resource::VirtualServerImage, :count)
76
+ Tengine::Resource::VirtualServerImage.all.map(&:id).map(&:to_s).sort.should == ids
77
+ end
78
+ end
79
+ end
80
+
81
+ context "テスト用JSONと異なるIDのデータが登録されている" do
82
+ before do
83
+ Tengine::Resource::VirtualServerImage.delete_all
84
+ subject.virtual_server_images.tap do |servers|
85
+ (11..15).each do |idx|
86
+ # TODO virtual_server_image_uuid_ ではなくて、 virtual_server_image_id_ では?
87
+ servers.create!(:provided_id => "virtual_server_image_uuid_%02d" % idx, :name => "virtual_server_image_name_%02d" % idx)
88
+ end
89
+ end
90
+ end
91
+
92
+ context "Wakameが0件返す場合" do
93
+ before{ setup_describe_images_file("20_describe_images_0_virtual_server_images.json")}
94
+ it "5件削除される" do
95
+ expect{
96
+ subject.virtual_server_image_watch
97
+ }.to change(Tengine::Resource::VirtualServerImage, :count).by(-5)
98
+ end
99
+ end
100
+
101
+ context "Wakameが登録されているものとは異なる5件返す場合" do
102
+ before{ setup_describe_images_file("21_describe_images_5_virtual_server_images.json")}
103
+ it "件数は変わらないが、データは変わっている" do
104
+ ids = Tengine::Resource::VirtualServerImage.all.map(&:id).map(&:to_s).sort
105
+ expect{
106
+ subject.virtual_server_image_watch
107
+ }.to_not change(Tengine::Resource::VirtualServerImage, :count)
108
+ Tengine::Resource::VirtualServerImage.all.map(&:id).map(&:to_s).sort.should_not == ids
109
+ end
110
+ end
111
+ end
112
+ end
113
+
114
+ end
115
+
116
+ end