occi-core 4.1.3 → 4.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (125) hide show
  1. data/.gitignore +1 -0
  2. data/Gemfile +8 -0
  3. data/README.md +49 -17
  4. data/lib/occi/collection.rb +37 -21
  5. data/lib/occi/core/action.rb +5 -5
  6. data/lib/occi/core/action_instance.rb +45 -3
  7. data/lib/occi/core/actions.rb +2 -1
  8. data/lib/occi/core/attributes.rb +253 -73
  9. data/lib/occi/core/categories.rb +1 -0
  10. data/lib/occi/core/category.rb +25 -8
  11. data/lib/occi/core/entities.rb +1 -0
  12. data/lib/occi/core/entity.rb +51 -74
  13. data/lib/occi/core/kind.rb +15 -11
  14. data/lib/occi/core/kinds.rb +1 -1
  15. data/lib/occi/core/link.rb +14 -15
  16. data/lib/occi/core/links.rb +1 -1
  17. data/lib/occi/core/mixin.rb +5 -5
  18. data/lib/occi/core/mixins.rb +2 -2
  19. data/lib/occi/core/properties.rb +90 -12
  20. data/lib/occi/core/resource.rb +7 -3
  21. data/lib/occi/core/resources.rb +2 -2
  22. data/lib/occi/errors/attribute_definitions_converted_error.rb +5 -0
  23. data/lib/occi/errors/attribute_missing_error.rb +5 -0
  24. data/lib/occi/errors/attribute_name_invalid_error.rb +5 -0
  25. data/lib/occi/errors/attribute_not_defined_error.rb +5 -0
  26. data/lib/occi/errors/attribute_property_type_error.rb +5 -0
  27. data/lib/occi/errors/attribute_type_error.rb +5 -0
  28. data/lib/occi/errors/kind_not_defined_error.rb +5 -0
  29. data/lib/occi/errors/parser_input_error.rb +5 -0
  30. data/lib/occi/errors/parser_type_error.rb +5 -0
  31. data/lib/occi/errors.rb +1 -0
  32. data/lib/occi/extensions/hashie.rb +25 -0
  33. data/lib/occi/helpers/comparators/action_instance.rb +22 -0
  34. data/lib/occi/helpers/comparators/attributes.rb +22 -0
  35. data/lib/occi/helpers/comparators/categories.rb +22 -0
  36. data/lib/occi/helpers/comparators/category.rb +22 -0
  37. data/lib/occi/helpers/comparators/collection.rb +40 -0
  38. data/lib/occi/helpers/comparators/entities.rb +22 -0
  39. data/lib/occi/helpers/comparators/entity.rb +22 -0
  40. data/lib/occi/helpers/comparators/properties.rb +26 -0
  41. data/lib/occi/helpers/comparators.rb +1 -0
  42. data/lib/occi/infrastructure/compute.rb +11 -9
  43. data/lib/occi/infrastructure/network.rb +27 -27
  44. data/lib/occi/infrastructure/networkinterface.rb +22 -23
  45. data/lib/occi/infrastructure/os_tpl.rb +1 -1
  46. data/lib/occi/infrastructure/resource_tpl.rb +1 -1
  47. data/lib/occi/infrastructure/storage.rb +7 -6
  48. data/lib/occi/infrastructure/storagelink.rb +4 -4
  49. data/lib/occi/log.rb +13 -10
  50. data/lib/occi/model.rb +9 -8
  51. data/lib/occi/parser/json.rb +11 -9
  52. data/lib/occi/parser/ova.rb +12 -6
  53. data/lib/occi/parser/ovf.rb +173 -116
  54. data/lib/occi/parser/text/constants.rb +87 -0
  55. data/lib/occi/parser/text.rb +161 -200
  56. data/lib/occi/parser/xml.rb +10 -8
  57. data/lib/occi/parser.rb +100 -50
  58. data/lib/occi/settings.rb +2 -1
  59. data/lib/occi/version.rb +1 -1
  60. data/lib/occi-core.rb +6 -4
  61. data/occi-core.gemspec +0 -7
  62. data/spec/occi/collection_samples/collection1.json +1 -0
  63. data/spec/occi/collection_samples/directory2/collection2.json +1 -0
  64. data/spec/occi/collection_spec.rb +961 -31
  65. data/spec/occi/core/action_instance_spec.rb +317 -0
  66. data/spec/occi/core/action_spec.rb +71 -0
  67. data/spec/occi/core/attributes_spec.rb +582 -27
  68. data/spec/occi/core/category_spec.rb +194 -18
  69. data/spec/occi/core/entities_spec.rb +96 -0
  70. data/spec/occi/core/entity_spec.rb +317 -28
  71. data/spec/occi/core/kind_spec.rb +127 -16
  72. data/spec/occi/core/link_spec.rb +35 -0
  73. data/spec/occi/core/links_spec.rb +130 -0
  74. data/spec/occi/core/mixins_spec.rb +107 -0
  75. data/spec/occi/core/properties_spec.rb +167 -0
  76. data/spec/occi/core/resource_spec.rb +23 -9
  77. data/spec/occi/core_spec.rb +12 -0
  78. data/spec/occi/infrastructure/compute_spec.rb +218 -18
  79. data/spec/occi/infrastructure/network_spec.rb +96 -0
  80. data/spec/occi/infrastructure/networkinterface_spec.rb +96 -0
  81. data/spec/occi/infrastructure/storage_spec.rb +33 -0
  82. data/spec/occi/infrastructure/storagelink_spec.rb +45 -0
  83. data/spec/occi/log_spec.rb +104 -1
  84. data/spec/occi/model_spec.rb +251 -39
  85. data/spec/occi/{test.json → parser/json_samples/test.json} +0 -0
  86. data/spec/occi/parser/ova_samples/test.dump +0 -0
  87. data/spec/occi/{test.ova → parser/ova_samples/test.ova} +0 -0
  88. data/spec/occi/parser/ovf_samples/test.dump +0 -0
  89. data/spec/occi/{test.ovf → parser/ovf_samples/test.ovf} +0 -0
  90. data/spec/occi/parser/text_samples/occi_categories.dump +0 -0
  91. data/spec/occi/parser/text_samples/occi_categories.text +2 -0
  92. data/spec/occi/parser/text_samples/occi_compute_rocci_server.dump +0 -0
  93. data/spec/occi/parser/text_samples/occi_compute_rocci_server.resource.dump +0 -0
  94. data/spec/occi/parser/text_samples/occi_compute_rocci_server.text +10 -0
  95. data/spec/occi/parser/text_samples/occi_link_resource_instance.dump +0 -0
  96. data/spec/occi/parser/text_samples/occi_link_resource_instance.text +7 -0
  97. data/spec/occi/parser/text_samples/occi_link_simple.dump +0 -0
  98. data/spec/occi/parser/text_samples/occi_link_simple.link_string.dump +0 -0
  99. data/spec/occi/parser/text_samples/occi_link_simple.text +1 -0
  100. data/spec/occi/parser/text_samples/occi_link_w_attributes.dump +0 -0
  101. data/spec/occi/parser/text_samples/occi_link_w_attributes.text +7 -0
  102. data/spec/occi/parser/text_samples/occi_link_w_category.dump +0 -0
  103. data/spec/occi/parser/text_samples/occi_link_w_category.text +3 -0
  104. data/spec/occi/parser/text_samples/occi_model_rocci_server.dump +0 -0
  105. data/spec/occi/parser/text_samples/occi_model_rocci_server.text +51 -0
  106. data/spec/occi/parser/text_samples/occi_network_rocci_server.dump +0 -0
  107. data/spec/occi/parser/text_samples/occi_network_rocci_server.resource.dump +0 -0
  108. data/spec/occi/parser/text_samples/occi_network_rocci_server.text +11 -0
  109. data/spec/occi/parser/text_samples/occi_resource_w_attributes.dump +0 -0
  110. data/spec/occi/parser/text_samples/occi_resource_w_attributes.text +11 -0
  111. data/spec/occi/parser/text_samples/occi_resource_w_inline_links.dump +0 -0
  112. data/spec/occi/parser/text_samples/occi_resource_w_inline_links.text +16 -0
  113. data/spec/occi/parser/text_samples/occi_resource_w_inline_links_only.dump +0 -0
  114. data/spec/occi/parser/text_samples/occi_resource_w_inline_links_only.text +13 -0
  115. data/spec/occi/parser/text_samples/occi_storage_rocci_server.dump +0 -0
  116. data/spec/occi/parser/text_samples/occi_storage_rocci_server.resource.dump +0 -0
  117. data/spec/occi/parser/text_samples/occi_storage_rocci_server.text +9 -0
  118. data/spec/occi/parser/text_spec.rb +274 -78
  119. data/spec/occi/parser/xml_samples/test.xml +352 -0
  120. data/spec/occi/parser_spec.rb +255 -104
  121. data/spec/occi-core_spec.rb +31 -0
  122. data/spec/spec_helper.rb +6 -2
  123. metadata +110 -111
  124. checksums.yaml +0 -7
  125. data/spec/occi/core/attribute_spec.rb +0 -0
@@ -1,29 +1,229 @@
1
1
  module Occi
2
2
  module Infrastructure
3
3
  describe Compute do
4
+ let(:compute){ Occi::Infrastructure::Compute.new }
5
+ let(:modl){
6
+ modl = Occi::Model.new
7
+ modl.register_infrastructure
8
+ modl }
4
9
 
5
- it "creates a storagelink to an existing storage resource" do
6
- compute = Occi::Infrastructure::Compute.new
7
- target = Occi::Infrastructure::Storage.new
8
- # create a random ID as the storage resource must already exist and therefore must have an ID assigned
9
- target.id = UUIDTools::UUID.random_create.to_s
10
- compute.storagelink target
11
- compute.links.should have(1).link
12
- compute.links.first.should be_kind_of Occi::Infrastructure::Storagelink
13
- compute.links.first.target.should be target
10
+ context 'Storage Links' do
11
+ let(:target){
12
+ target = Occi::Infrastructure::Storage.new
13
+ # create a random ID as the storage resource must already exist and therefore must have an ID assigned
14
+ target.id = UUIDTools::UUID.random_create.to_s
15
+ target }
16
+
17
+ context '#storagelink' do
18
+ it "creates a single storagelink" do
19
+ compute.storagelink target
20
+ expect(compute.links).to have(1).link
21
+ end
22
+
23
+ it "creates a storagelink to a storage resource" do
24
+ compute.storagelink target
25
+ expect(compute.links.first).to be_kind_of Occi::Infrastructure::Storagelink
26
+ end
27
+
28
+ it "has the correct link as target" do
29
+ compute.storagelink target
30
+ expect(compute.links.first.target).to be target
31
+ end
32
+
33
+ it "has target with correct ID" do
34
+ compute.storagelink target
35
+ expect(compute.links.first.target.id).to eq target.id
36
+ end
37
+ end
38
+
39
+ context '#storagelinks' do
40
+ it 'has the correct number of members -- single' do
41
+ compute.storagelink target
42
+ compute.model=modl
43
+ expect(compute.storagelinks.count).to eq 1
44
+ end
45
+
46
+ it 'has the correct number of members -- double' do
47
+ target2 = Occi::Infrastructure::Storage.new
48
+ target2.id = UUIDTools::UUID.random_create.to_s
49
+ compute.storagelink target
50
+ compute.storagelink target2
51
+ compute.model=modl
52
+ expect(compute.storagelinks.count).to eq 2
53
+ end
54
+
55
+ it 'shows correctly in collections' do
56
+ compute.storagelink target
57
+ compute.model=modl
58
+ expect(compute.storagelinks[0].target.id).to eq target.id
59
+ end
60
+ end
61
+ end
62
+
63
+ context 'Network Interfaces' do
64
+ let(:target){
65
+ target = Occi::Infrastructure::Network.new
66
+ # create a random ID as the network resource must already exist and therefore must have an ID assigned
67
+ target.id = UUIDTools::UUID.random_create.to_s
68
+ target }
69
+
70
+ context '#networkinterface' do
71
+ it "creates a single networkinterface" do
72
+ compute.networkinterface target
73
+ expect(compute.links).to have(1).link
74
+ end
75
+
76
+ it "creates a networkinterface to a storage resource" do
77
+ compute.networkinterface target
78
+ expect(compute.links.first).to be_kind_of Occi::Infrastructure::Networkinterface
79
+ end
80
+
81
+ it "has the correct interface as target" do
82
+ compute.networkinterface target
83
+ expect(compute.links.first.target).to be target
84
+ end
85
+ end
86
+
87
+ context '#networkinterfaces' do
88
+ it 'has the correct number of members -- single' do
89
+ compute.networkinterface target
90
+ compute.model=modl
91
+ expect(compute.networkinterfaces.count).to eq 1
92
+ end
93
+
94
+ it 'has the correct number of members -- double' do
95
+ target2 = Occi::Infrastructure::Network.new
96
+ target2.id = UUIDTools::UUID.random_create.to_s
97
+ compute.networkinterface target
98
+ compute.networkinterface target2
99
+ compute.model=modl
100
+ expect(compute.networkinterfaces.count).to eq 2
101
+ end
102
+
103
+ it 'shows correctly in collections' do
104
+ compute.networkinterface target
105
+ compute.model=modl
106
+ expect(compute.networkinterfaces[0].target.id).to eq target.id
107
+ end
108
+ end
109
+ end
110
+
111
+ context '#architecture' do
112
+ it 'can be set and read' do
113
+ compute.architecture = 'x64'
114
+ expect(compute.architecture).to eq 'x64'
115
+ end
116
+
117
+ context 'Pattern matching' do
118
+ before(:each) { Occi::Settings['compatibility']=false }
119
+ after(:each) { Occi::Settings.reload! }
120
+
121
+ it 'preserves non-matching values with verification settings off' do
122
+ Occi::Settings['verify_attribute_pattern']=false
123
+ compute.model=modl
124
+ expect{compute.architecture = 'z80'}.to_not raise_error
125
+ end
126
+
127
+ it 'rejects non-matching values with verification settings on' do
128
+ Occi::Settings['verify_attribute_pattern']=true
129
+ compute.model=modl
130
+ expect{compute.architecture = 'z80'}.to raise_error Occi::Errors::AttributeTypeError
131
+ end
132
+ end
133
+ end
134
+
135
+ context '#cores' do
136
+ it 'can be set and read' do
137
+ compute.cores = 32
138
+ expect(compute.cores).to eq 32
139
+ end
140
+
141
+ it 'rejects non-numeric values' do
142
+ expect{compute.memory = 'a few'}.to raise_error
143
+ end
144
+ end
145
+
146
+ context '#hostname' do
147
+ it 'can be set and read' do
148
+ compute.hostname = 'testhostname'
149
+ expect(compute.hostname).to eq 'testhostname'
150
+ end
151
+
152
+ context 'Pattern matching' do
153
+ before(:each) { Occi::Settings['compatibility']=false }
154
+ after(:each) { Occi::Settings.reload! }
155
+
156
+ it 'preserves non-matching values with verification settings off' do
157
+ Occi::Settings['verify_attribute_pattern']=false
158
+ compute.model=modl
159
+ expect{compute.hostname = 'notaproperhostname'}.to_not raise_error
160
+ end
161
+
162
+ it 'rejects non-matching values with verification settings on' do
163
+ Occi::Settings['verify_attribute_pattern']=true
164
+ compute.model=modl
165
+ expect{compute.hostname = 'notaproperhostname'}.to raise_error Occi::Errors::AttributeTypeError
166
+ end
167
+ end
14
168
  end
15
169
 
16
- it "creates a networkinterface to an existing network resource" do
17
- compute = Occi::Infrastructure::Compute.new
18
- target = Occi::Infrastructure::Network.new
19
- # create a random ID as the network resource must already exist and therefore must have an ID assigned
20
- target.id = UUIDTools::UUID.random_create.to_s
21
- compute.networkinterface target
22
- compute.links.should have(1).link
23
- compute.links.first.should be_kind_of Occi::Infrastructure::Networkinterface
24
- compute.links.first.target.should be target
170
+ context '#speed' do
171
+ it 'can be set and read' do
172
+ compute.speed = 3000.0
173
+ expect(compute.speed).to eq 3000.0
174
+ end
175
+
176
+ it 'rejects non-numeric values' do
177
+ expect{compute.memory = 'fast'}.to raise_error
178
+ end
25
179
  end
26
180
 
181
+ context '#memory' do
182
+ it 'can be set and read' do
183
+ compute.memory = 4096
184
+ expect(compute.memory).to eq 4096
185
+ end
186
+
187
+ it 'rejects non-numeric values' do
188
+ expect{compute.memory = 'a lot'}.to raise_error
189
+ end
190
+ end
191
+
192
+ context '#state' do
193
+ it 'has correct default value with set_defaults == true' do
194
+ compute.model=modl
195
+ compute.check(true)
196
+ expect(compute.state).to eq 'inactive'
197
+ end
198
+
199
+ it 'does not take the default value with set_defaults set to default' do
200
+ compute.model=modl
201
+ compute.check
202
+ expect(compute.state).to_not eq 'inactive'
203
+ end
204
+
205
+ it 'can be set and read' do
206
+ compute.state = 'active'
207
+ expect(compute.state).to eq 'active'
208
+ end
209
+
210
+ context 'Pattern matching' do
211
+ before(:each) { Occi::Settings['compatibility']=false }
212
+ after(:each) { Occi::Settings.reload! }
213
+
214
+ it 'preserves non-matching values with verification settings off' do
215
+ Occi::Settings['verify_attribute_pattern']=false
216
+ compute.model=modl
217
+ expect{compute.state = 'broken'}.to_not raise_error
218
+ end
219
+
220
+ it 'rejects non-matching values with verification settings on' do
221
+ Occi::Settings['verify_attribute_pattern']=true
222
+ compute.model=modl
223
+ expect{compute.state = 'broken'}.to raise_error Occi::Errors::AttributeTypeError
224
+ end
225
+ end
226
+ end
27
227
  end
28
228
  end
29
229
  end
@@ -0,0 +1,96 @@
1
+ module Occi
2
+ module Infrastructure
3
+ describe Network do
4
+
5
+ context 'setters/getters' do
6
+ let(:network){ Occi::Infrastructure::Network.new }
7
+ context '#vlan' do
8
+ it 'Can be set and read as attribute' do
9
+ network.vlan = 4
10
+ expect(network.attributes.occi.network.vlan).to eql 4
11
+ end
12
+
13
+ it 'Can be set and read through getter' do
14
+ network.vlan = 4
15
+ expect(network.vlan).to eql 4
16
+ end
17
+ end
18
+
19
+ context '#label' do
20
+ it 'Can be set and read as attribute' do
21
+ network.label = "Network Label"
22
+ expect(network.attributes.occi.network.label).to eql "Network Label"
23
+ end
24
+
25
+ it 'Can be set and read through getter' do
26
+ network.label = "Network Label"
27
+ expect(network.label).to eql "Network Label"
28
+ end
29
+ end
30
+
31
+ context '#state' do
32
+ it 'Can be set and read as attribute' do
33
+ network.state = "inactive"
34
+ expect(network.attributes.occi.network.state).to eql "inactive"
35
+ end
36
+
37
+ it 'Can be set and read through getter' do
38
+ network.state = "inactive"
39
+ expect(network.state).to eql "inactive"
40
+ end
41
+ end
42
+
43
+ context '#address' do
44
+ it 'Can be set and read as attribute' do
45
+ network.address = "127.0.0.1"
46
+ expect(network.attributes.occi.network.address).to eql "127.0.0.1"
47
+ end
48
+
49
+ it 'Can be set and read through getter' do
50
+ network.address = "127.0.0.1"
51
+ expect(network.address).to eql "127.0.0.1"
52
+ end
53
+ end
54
+
55
+ context '#gateway' do
56
+ it 'Can be set and read as attribute' do
57
+ network.gateway = "127.0.0.255"
58
+ expect(network.attributes.occi.network.gateway).to eql "127.0.0.255"
59
+ end
60
+
61
+ it 'Can be set and read through getter' do
62
+ network.gateway = "127.0.0.255"
63
+ expect(network.gateway).to eql "127.0.0.255"
64
+ end
65
+ end
66
+
67
+ context '#allocation' do
68
+ it 'Can be set and read as attribute' do
69
+ network.allocation = "static"
70
+ expect(network.attributes.occi.network.allocation).to eql "static"
71
+ end
72
+
73
+ it 'Can be set and read through getter' do
74
+ network.allocation = "static"
75
+ expect(network.allocation).to eql "static"
76
+ end
77
+ end
78
+ end
79
+
80
+ context '#ipnetwork' do
81
+ let(:network){ Occi::Infrastructure::Network.new }
82
+
83
+ it 'adds the Ipnetwork mixin' do
84
+ network.ipnetwork(true)
85
+ expect(network.mixins.first.to_s).to eql "http://schemas.ogf.org/occi/infrastructure/network#ipnetwork"
86
+ end
87
+
88
+ it 'removes the Ipnetwork mixin' do
89
+ network.ipnetwork(true)
90
+ network.ipnetwork(false)
91
+ expect(network.mixins.count).to eql 0
92
+ end
93
+ end
94
+ end
95
+ end
96
+ end
@@ -0,0 +1,96 @@
1
+ module Occi
2
+ module Infrastructure
3
+ describe Networkinterface do
4
+
5
+ context 'setters/getters' do
6
+ let(:networkinterface){ Occi::Infrastructure::Networkinterface.new }
7
+ context '#interface' do
8
+ it 'Can be set and read as attribute' do
9
+ networkinterface.interface = "eth0"
10
+ expect(networkinterface.attributes.occi.networkinterface.interface).to eql "eth0"
11
+ end
12
+
13
+ it 'Can be set and read through getter' do
14
+ networkinterface.interface = "eth0"
15
+ expect(networkinterface.interface).to eql "eth0"
16
+ end
17
+ end
18
+
19
+ context '#mac' do
20
+ it 'Can be set and read as attribute' do
21
+ networkinterface.mac = "FF-FF-FF-FF-FF-FF"
22
+ expect(networkinterface.attributes.occi.networkinterface.mac).to eql "FF-FF-FF-FF-FF-FF"
23
+ end
24
+
25
+ it 'Can be set and read through getter' do
26
+ networkinterface.mac = "FF-FF-FF-FF-FF-FF"
27
+ expect(networkinterface.mac).to eql "FF-FF-FF-FF-FF-FF"
28
+ end
29
+ end
30
+
31
+ context '#state' do
32
+ it 'Can be set and read as attribute' do
33
+ networkinterface.state = "error"
34
+ expect(networkinterface.attributes.occi.networkinterface.state).to eql "error"
35
+ end
36
+
37
+ it 'Can be set and read through getter' do
38
+ networkinterface.state = "error"
39
+ expect(networkinterface.state).to eql "error"
40
+ end
41
+ end
42
+
43
+ context '#address' do
44
+ it 'Can be set and read as attribute' do
45
+ networkinterface.address = "127.0.0.1"
46
+ expect(networkinterface.attributes.occi.networkinterface.address).to eql "127.0.0.1"
47
+ end
48
+
49
+ it 'Can be set and read through getter' do
50
+ networkinterface.address = "127.0.0.1"
51
+ expect(networkinterface.address).to eql "127.0.0.1"
52
+ end
53
+ end
54
+
55
+ context '#gateway' do
56
+ it 'Can be set and read as attribute' do
57
+ networkinterface.gateway = "127.0.0.255"
58
+ expect(networkinterface.attributes.occi.networkinterface.gateway).to eql "127.0.0.255"
59
+ end
60
+
61
+ it 'Can be set and read through getter' do
62
+ networkinterface.gateway = "127.0.0.255"
63
+ expect(networkinterface.gateway).to eql "127.0.0.255"
64
+ end
65
+ end
66
+
67
+ context '#allocation' do
68
+ it 'Can be set and read as attribute' do
69
+ networkinterface.allocation = "static"
70
+ expect(networkinterface.attributes.occi.networkinterface.allocation).to eql "static"
71
+ end
72
+
73
+ it 'Can be set and read through getter' do
74
+ networkinterface.allocation = "static"
75
+ expect(networkinterface.allocation).to eql "static"
76
+ end
77
+ end
78
+ end
79
+
80
+ context '#ipnetworkinterface' do
81
+ let(:networkinterface){ Occi::Infrastructure::Networkinterface.new }
82
+
83
+ it 'adds the Ipnetwork mixin' do
84
+ networkinterface.ipnetworkinterface(true)
85
+ expect(networkinterface.mixins.first.to_s).to eql "http://schemas.ogf.org/occi/infrastructure/networkinterface#ipnetworkinterface"
86
+ end
87
+
88
+ it 'removes the Ipnetwork mixin' do
89
+ networkinterface.ipnetworkinterface(true)
90
+ networkinterface.ipnetworkinterface(false)
91
+ expect(networkinterface.mixins.count).to eql 0
92
+ end
93
+ end
94
+ end
95
+ end
96
+ end
@@ -0,0 +1,33 @@
1
+ module Occi
2
+ module Infrastructure
3
+ describe Storage do
4
+
5
+ context 'setters/getters' do
6
+ let(:storage){ Occi::Infrastructure::Storage.new }
7
+ context '#size' do
8
+ it 'Can be set and read as attribute' do
9
+ storage.size = 16777216
10
+ expect(storage.attributes.occi.storage['size']).to eql 16777216
11
+ end
12
+
13
+ it 'Can be set and read through getter' do
14
+ storage.size = 16777216
15
+ expect(storage.size).to eql 16777216
16
+ end
17
+ end
18
+
19
+ context '#state' do
20
+ it 'Can be set and read as attribute' do
21
+ storage.state = "online"
22
+ expect(storage.attributes.occi.storage.state).to eql "online"
23
+ end
24
+
25
+ it 'Can be set and read through getter' do
26
+ storage.state = "online"
27
+ expect(storage.state).to eql "online"
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,45 @@
1
+ module Occi
2
+ module Infrastructure
3
+ describe Storagelink do
4
+
5
+ context 'setters/getters' do
6
+ let(:storagelink){ Occi::Infrastructure::Storagelink.new }
7
+ context '#deviceid' do
8
+ it 'Can be set and read as attribute' do
9
+ storagelink.deviceid = "sda"
10
+ expect(storagelink.attributes.occi.storagelink.deviceid).to eql "sda"
11
+ end
12
+
13
+ it 'Can be set and read through getter' do
14
+ storagelink.deviceid = "sda"
15
+ expect(storagelink.deviceid).to eql "sda"
16
+ end
17
+ end
18
+
19
+ context '#mountpoint' do
20
+ it 'Can be set and read as attribute' do
21
+ storagelink.mountpoint = "/mnt/sda"
22
+ expect(storagelink.attributes.occi.storagelink.mountpoint).to eql "/mnt/sda"
23
+ end
24
+
25
+ it 'Can be set and read through getter' do
26
+ storagelink.mountpoint = "/mnt/sda"
27
+ expect(storagelink.mountpoint).to eql "/mnt/sda"
28
+ end
29
+ end
30
+
31
+ context '#state' do
32
+ it 'Can be set and read as attribute' do
33
+ storagelink.state = "active"
34
+ expect(storagelink.attributes.occi.storagelink.state).to eql "active"
35
+ end
36
+
37
+ it 'Can be set and read through getter' do
38
+ storagelink.state = "active"
39
+ expect(storagelink.state).to eql "active"
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -1,7 +1,101 @@
1
1
  module Occi
2
2
  describe Log do
3
3
 
4
- it "logs a message to a pipe" do
4
+ context 'logging to files' do
5
+ let!(:testIO){ StringIO.new}
6
+ let!(:logger){ Occi::Log.new(testIO) }
7
+ after(:each) do
8
+ logger.close
9
+ end
10
+
11
+ it 'logs correctly with prioritiy DEBUG' do
12
+ Occi::Log.debug("Test Debug Text")
13
+ expect(testIO.string).to match (/D.*DEBUG.*Test Debug Text/)
14
+ end
15
+
16
+ it 'logs correctly with prioritiy INFO' do
17
+ Occi::Log.info("Test Info Text")
18
+ expect(testIO.string).to match (/I.*INFO.*Test Info Text/)
19
+ end
20
+
21
+ it 'logs correctly with prioritiy WARN' do
22
+ Occi::Log.warn("Test Warning Text")
23
+ expect(testIO.string).to match (/W.*WARN.*Test Warning Text/)
24
+ end
25
+
26
+ it 'logs correctly with prioritiy ERROR' do
27
+ Occi::Log.error("Test Error Text")
28
+ expect(testIO.string).to match (/E.*ERROR.*Test Error Text/)
29
+ end
30
+
31
+ it 'logs correctly with prioritiy FATAL' do
32
+ Occi::Log.fatal("Test Fatal Text")
33
+ expect(testIO.string).to match (/F.*FATAL.*Test Fatal Text/)
34
+ end
35
+
36
+ context "with log level set to filter out some messages" do
37
+ before(:each) do
38
+ logger.level=Occi::Log::ERROR
39
+ end
40
+ it 'does not log prioritiy DEBUG with log level set to ERROR' do
41
+ Occi::Log.debug("Second Debug Text")
42
+ expect(testIO.string).to_not match (/D.*DEBUG.*Second Debug Text/)
43
+ end
44
+
45
+ it 'does not log prioritiy WARN with log level set to ERROR' do
46
+ Occi::Log.info("Second Info Text")
47
+ expect(testIO.string).to_not match (/I.*INFO.*Second Info Text/)
48
+ end
49
+
50
+ it 'does not log prioritiy WARN with log level set to ERROR' do
51
+ Occi::Log.warn("Second Warning Text")
52
+ expect(testIO.string).to_not match (/W.*WARN.*Second Warning Text/)
53
+ end
54
+
55
+ it 'still logs with prioritiy ERROR' do
56
+ Occi::Log.error("Second Error Text")
57
+ expect(testIO.string).to match (/E.*ERROR.*Second Error Text/)
58
+ end
59
+
60
+ it 'still logs with prioritiy FATAL' do
61
+ Occi::Log.fatal("Second Fatal Text")
62
+ expect(testIO.string).to match (/F.*FATAL.*Second Fatal Text/)
63
+ end
64
+ end
65
+
66
+ it 'tells log lines apart correctly' do #This tests the correctness of the testing procedure rather than the code itself
67
+ Occi::Log.error("Second Error Text")
68
+ Occi::Log.fatal("Second Fatal Text")
69
+ expect(testIO.string).to_not match (/E.*ERROR.*Test Fatal Text/)
70
+ end
71
+
72
+ end
73
+
74
+ it 'copes with read-only log file' do
75
+ (contents = "locked file contents").freeze
76
+ testIO = StringIO.open(contents)
77
+ logger = Occi::Log.new(testIO)
78
+ expect(Occi::Log.fatal("New content")).to eq nil
79
+ logger.close
80
+ end
81
+
82
+ context 'reporting current log levels correctly' do
83
+ testIO = StringIO.new
84
+ logger = Occi::Log.new(testIO)
85
+
86
+ it 'has initial log level set to 0' do
87
+ expect(logger.level).to eq 0
88
+ end
89
+
90
+ it 'reports ERROR log level correctly' do
91
+ logger.level=Occi::Log::ERROR
92
+ expect(logger.level).to eq 3
93
+ end
94
+
95
+ logger.close
96
+ end
97
+
98
+ it 'logs through a pipe' do
5
99
  r, w = IO.pipe
6
100
  logger = Occi::Log.new(w)
7
101
  logger.level = Occi::Log::INFO
@@ -10,5 +104,14 @@ module Occi
10
104
  logger.close
11
105
  end
12
106
 
107
+ it 'logs through a pre-initiated Logger' do
108
+ r, w = IO.pipe
109
+ logger = Occi::Log.new(Logger.new(w))
110
+ logger.level = Occi::Log::INFO
111
+ Occi::Log.info("Test")
112
+ r.readline.include?("Test")
113
+ logger.close
114
+ end
115
+
13
116
  end
14
117
  end