tengine_resource 0.5.13

Sign up to get free protection for your applications and to get access to all the features.
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