PageRenderTime 51ms CodeModel.GetById 23ms RepoModel.GetById 0ms app.codeStats 0ms

/spec/unit/plugins/cloud_v2_spec.rb

https://github.com/wistia/ohai
Ruby | 292 lines | 262 code | 14 blank | 16 comment | 3 complexity | d2d734439f2146adb4bc85e52862ea8f MD5 | raw file
Possible License(s): Apache-2.0
  1. #
  2. # Author:: Cary Penniman (<cary@rightscale.com>)
  3. # License:: Apache License, Version 2.0
  4. #
  5. # Licensed under the Apache License, Version 2.0 (the "License");
  6. # you may not use this file except in compliance with the License.
  7. # You may obtain a copy of the License at
  8. #
  9. # http://www.apache.org/licenses/LICENSE-2.0
  10. #
  11. # Unless required by applicable law or agreed to in writing, software
  12. # distributed under the License is distributed on an "AS IS" BASIS,
  13. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14. # See the License for the specific language governing permissions and
  15. # limitations under the License.
  16. #
  17. require File.expand_path(File.dirname(__FILE__) + '/../../spec_helper.rb')
  18. require 'ipaddr'
  19. describe "CloudAttrs object" do
  20. before(:each) do
  21. @plugin = get_plugin("cloud_v2")
  22. end
  23. let(:cloud_node) do
  24. {"public_ipv4_addrs"=>["1.2.3.1"],
  25. "local_ipv4_addrs"=>["1.2.4.1"],
  26. "public_ipv6_addrs"=>["3ffe:505:2::1"],
  27. "local_ipv6_addrs"=>["3ffe:506:2::1"],
  28. "public_ipv4"=>"1.2.3.1",
  29. "local_ipv4"=>"1.2.4.1",
  30. "public_ipv6"=>"3ffe:505:2::1",
  31. "local_ipv6"=>"3ffe:506:2::1",
  32. "public_hostname"=>"myhost.somewhere.com",
  33. "local_hostname"=>"my-localhost",
  34. "provider"=>"my_awesome_cloud"
  35. }
  36. end
  37. it "populates cloud mash" do
  38. @cloud_attr_obj = ::CloudAttrs.new()
  39. @cloud_attr_obj.add_ipv4_addr("1.2.3.1", :public)
  40. @cloud_attr_obj.add_ipv4_addr("1.2.4.1", :private)
  41. @cloud_attr_obj.add_ipv6_addr("3ffe:505:2::1", :public)
  42. @cloud_attr_obj.add_ipv6_addr("3ffe:506:2::1", :private)
  43. @cloud_attr_obj.public_hostname = "myhost.somewhere.com"
  44. @cloud_attr_obj.local_hostname = "my-localhost"
  45. @cloud_attr_obj.provider = "my_awesome_cloud"
  46. @cloud_attr_obj.cloud_mash.should == cloud_node
  47. end
  48. it "throws exception with a bad ipv4 address" do
  49. @cloud_attr_obj = ::CloudAttrs.new()
  50. lambda { @cloud_attr_obj.add_ipv6_addr("somebogusstring", :public) }.should raise_error
  51. end
  52. it "throws exception with a bad ipv6 address" do
  53. @cloud_attr_obj = ::CloudAttrs.new()
  54. lambda { @cloud_attr_obj.add_ipv6_addr("FEED:B0B:DEAD:BEEF", :public) }.should raise_error
  55. end
  56. it "throws exception with ipv6 address passed to ipv4" do
  57. @cloud_attr_obj = ::CloudAttrs.new()
  58. lambda { @cloud_attr_obj.add_ipv4_addr("3ffe:506:2::1", :public) }.should raise_error
  59. end
  60. it "throws exception with ipv4 address passed to ipv6" do
  61. @cloud_attr_obj = ::CloudAttrs.new()
  62. lambda { @cloud_attr_obj.add_ipv6_addr("1.2.3.4", :public) }.should raise_error
  63. end
  64. end
  65. describe Ohai::System, "plugin cloud" do
  66. before(:each) do
  67. @plugin = get_plugin("cloud_v2")
  68. end
  69. describe "with no cloud mashes" do
  70. it "doesn't populate the cloud data" do
  71. @plugin[:ec2] = nil
  72. @plugin[:rackspace] = nil
  73. @plugin[:eucalyptus] = nil
  74. @plugin[:linode] = nil
  75. @plugin[:azure] = nil
  76. @plugin[:gce] = nil
  77. @plugin.run
  78. @plugin[:cloud_v2].should be_nil
  79. end
  80. end
  81. describe "with EC2 mash" do
  82. before do
  83. @plugin[:ec2] = Mash.new()
  84. end
  85. it "populates cloud public ip" do
  86. @plugin[:ec2]['public_ipv4'] = "174.129.150.8"
  87. @plugin.run
  88. @plugin[:cloud_v2][:public_ipv4_addrs][0].should == @plugin[:ec2]['public_ipv4']
  89. end
  90. it "populates cloud private ip" do
  91. @plugin[:ec2]['local_ipv4'] = "10.252.42.149"
  92. @plugin.run
  93. @plugin[:cloud_v2][:local_ipv4_addrs][0].should == @plugin[:ec2]['local_ipv4']
  94. end
  95. it "populates cloud provider" do
  96. @plugin.run
  97. @plugin[:cloud_v2][:provider].should == "ec2"
  98. end
  99. end
  100. describe "with GCE mash" do
  101. before do
  102. @plugin[:gce] = Mash.new()
  103. @plugin[:gce]['instance'] = Mash.new()
  104. @plugin[:gce]['instance']['networkInterfaces'] = [
  105. {
  106. "accessConfigs" => [ {"externalIp" => "8.35.198.173", "type"=>"ONE_TO_ONE_NAT"} ],
  107. "ip" => "10.240.0.102",
  108. "network"=> "projects/foo/networks/default"
  109. }
  110. ]
  111. end
  112. it "populates cloud public ip" do
  113. @plugin.run
  114. @plugin[:cloud_v2][:public_ipv4_addrs][0].should == "8.35.198.173"
  115. end
  116. it "populates cloud private ip" do
  117. @plugin.run
  118. @plugin[:cloud_v2][:local_ipv4_addrs][0].should == "10.240.0.102"
  119. end
  120. it "populates cloud provider" do
  121. @plugin.run
  122. @plugin[:cloud_v2][:provider].should == "gce"
  123. end
  124. end
  125. describe "with rackspace" do
  126. before do
  127. @plugin[:rackspace] = Mash.new()
  128. end
  129. it "populates cloud public ip" do
  130. @plugin[:rackspace][:public_ipv4] = "174.129.150.8"
  131. @plugin.run
  132. @plugin[:cloud_v2][:public_ipv4].should == @plugin[:rackspace][:public_ipv4]
  133. end
  134. it "populates cloud public ipv6" do
  135. @plugin[:rackspace][:public_ipv6] = "2a00:1a48:7805:111:e875:efaf:ff08:75"
  136. @plugin.run
  137. @plugin[:cloud_v2][:public_ipv6].should == @plugin[:rackspace][:public_ipv6]
  138. end
  139. it "populates cloud private ip" do
  140. @plugin[:rackspace][:local_ipv4] = "10.252.42.149"
  141. @plugin.run
  142. @plugin[:cloud_v2][:local_ipv4].should == @plugin[:rackspace][:local_ipv4]
  143. end
  144. it "populates cloud private ipv6" do
  145. @plugin[:rackspace][:local_ipv6] = "2a00:1a48:7805:111:e875:efaf:ff08:75"
  146. @plugin.run
  147. @plugin[:cloud_v2][:local_ipv6].should == @plugin[:rackspace][:local_ipv6]
  148. end
  149. it "populates first cloud public ip" do
  150. @plugin[:rackspace][:public_ipv4] = "174.129.150.8"
  151. @plugin.run
  152. @plugin[:cloud_v2][:public_ipv4_addrs].first.should == @plugin[:rackspace][:public_ipv4]
  153. end
  154. it "populates first cloud public ip" do
  155. @plugin[:rackspace][:local_ipv4] = "174.129.150.8"
  156. @plugin.run
  157. @plugin[:cloud_v2][:local_ipv4_addrs].first.should == @plugin[:rackspace][:local_ipv4]
  158. end
  159. it "populates cloud provider" do
  160. @plugin.run
  161. @plugin[:cloud_v2][:provider].should == "rackspace"
  162. end
  163. end
  164. describe "with linode mash" do
  165. before do
  166. @plugin[:linode] = Mash.new()
  167. end
  168. it "populates cloud public ip" do
  169. @plugin[:linode]['public_ip'] = "174.129.150.8"
  170. @plugin.run
  171. @plugin[:cloud_v2][:public_ipv4_addrs][0].should == @plugin[:linode][:public_ip]
  172. end
  173. it "populates cloud private ip" do
  174. @plugin[:linode]['private_ip'] = "10.252.42.149"
  175. @plugin.run
  176. @plugin[:cloud_v2][:local_ipv4_addrs][0].should == @plugin[:linode][:private_ip]
  177. end
  178. it "populates first cloud public ip" do
  179. @plugin[:linode]['public_ip'] = "174.129.150.8"
  180. @plugin.run
  181. @plugin[:cloud_v2][:public_ipv4_addrs].first.should == @plugin[:linode][:public_ip]
  182. end
  183. it "populates cloud provider" do
  184. @plugin.run
  185. @plugin[:cloud_v2][:provider].should == "linode"
  186. end
  187. end
  188. describe "with eucalyptus mash" do
  189. before do
  190. @plugin[:eucalyptus] = Mash.new()
  191. end
  192. it "populates cloud public ip" do
  193. @plugin[:eucalyptus]['public_ipv4'] = "174.129.150.8"
  194. @plugin.run
  195. @plugin[:cloud_v2][:public_ipv4_addrs][0].should == @plugin[:eucalyptus]['public_ipv4']
  196. end
  197. it "populates cloud private ip" do
  198. @plugin[:eucalyptus]['local_ipv4'] = "10.252.42.149"
  199. @plugin.run
  200. @plugin[:cloud_v2][:local_ipv4_addrs][0].should == @plugin[:eucalyptus]['local_ipv4']
  201. end
  202. it "populates cloud provider" do
  203. @plugin.run
  204. @plugin[:cloud_v2][:provider].should == "eucalyptus"
  205. end
  206. end
  207. describe "with Azure mash" do
  208. before do
  209. @plugin[:azure] = Mash.new()
  210. end
  211. it "populates cloud public ip" do
  212. @plugin[:azure]['public_ip'] = "174.129.150.8"
  213. @plugin.run
  214. @plugin[:cloud_v2][:public_ipv4_addrs][0].should == @plugin[:azure]['public_ip']
  215. end
  216. it "doesn't populates cloud vm_name" do
  217. @plugin[:azure]['vm_name'] = "linux-vm"
  218. @plugin.run
  219. @plugin[:cloud_v2][:vm_name].should_not == @plugin[:azure]['vm_name']
  220. end
  221. it "populates cloud public_hostname" do
  222. @plugin[:azure]['public_fqdn'] = "linux-vm-svc.cloudapp.net"
  223. @plugin.run
  224. @plugin[:cloud_v2][:public_hostname].should == @plugin[:azure]['public_fqdn']
  225. end
  226. it "doesn't populate cloud public_ssh_port" do
  227. @plugin[:azure]['public_ssh_port'] = "22"
  228. @plugin.run
  229. @plugin[:cloud_v2][:public_ssh_port].should be_nil
  230. end
  231. it "should not populate cloud public_ssh_port when winrm is used" do
  232. @plugin[:azure]['public_winrm_port'] = "5985"
  233. @plugin.run
  234. @plugin[:cloud_v2][:public_ssh_port].should be_nil
  235. end
  236. it "populates cloud public_winrm_port" do
  237. @plugin[:azure]['public_winrm_port'] = "5985"
  238. @plugin.run
  239. @plugin[:cloud_v2][:public_winrm_port].should be_nil
  240. end
  241. it "populates cloud provider" do
  242. @plugin.run
  243. @plugin[:cloud_v2][:provider].should == "azure"
  244. end
  245. end
  246. end