ohai 8.0.1 → 8.1.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.
Files changed (37) hide show
  1. checksums.yaml +13 -5
  2. data/lib/ohai/loader.rb +1 -1
  3. data/lib/ohai/mixin/gce_metadata.rb +2 -1
  4. data/lib/ohai/plugins/cloud.rb +56 -6
  5. data/lib/ohai/plugins/cloud_v2.rb +29 -1
  6. data/lib/ohai/plugins/cloudstack.rb +7 -0
  7. data/lib/ohai/plugins/digital_ocean.rb +81 -0
  8. data/lib/ohai/plugins/elixir.rb +32 -0
  9. data/lib/ohai/plugins/linode.rb +1 -0
  10. data/lib/ohai/plugins/linux/block_device.rb +5 -0
  11. data/lib/ohai/plugins/linux/cpu.rb +21 -1
  12. data/lib/ohai/plugins/linux/filesystem.rb +1 -1
  13. data/lib/ohai/plugins/linux/network.rb +6 -2
  14. data/lib/ohai/plugins/linux/platform.rb +2 -0
  15. data/lib/ohai/plugins/linux/virtualization.rb +14 -3
  16. data/lib/ohai/plugins/php.rb +13 -6
  17. data/lib/ohai/plugins/ruby.rb +10 -10
  18. data/lib/ohai/plugins/rust.rb +32 -0
  19. data/lib/ohai/plugins/ssh_host_key.rb +6 -0
  20. data/lib/ohai/util/ip_helper.rb +52 -0
  21. data/lib/ohai/version.rb +1 -1
  22. data/spec/data/plugins/php.output +16 -0
  23. data/spec/unit/plugins/cloud_spec.rb +63 -9
  24. data/spec/unit/plugins/cloud_v2_spec.rb +123 -25
  25. data/spec/unit/plugins/cloudstack_spec.rb +1 -1
  26. data/spec/unit/plugins/digital_ocean_spec.rb +211 -0
  27. data/spec/unit/plugins/elixir_spec.rb +46 -0
  28. data/spec/unit/plugins/linux/cpu_spec.rb +112 -35
  29. data/spec/unit/plugins/linux/filesystem_spec.rb +7 -7
  30. data/spec/unit/plugins/linux/network_spec.rb +63 -4
  31. data/spec/unit/plugins/linux/platform_spec.rb +13 -0
  32. data/spec/unit/plugins/linux/virtualization_spec.rb +146 -21
  33. data/spec/unit/plugins/php_spec.rb +37 -3
  34. data/spec/unit/plugins/rust_spec.rb +43 -0
  35. data/spec/unit/plugins/ssh_host_keys_spec.rb +11 -0
  36. data/spec/unit/util/ip_helper_spec.rb +128 -0
  37. metadata +49 -41
@@ -24,7 +24,7 @@ describe Ohai::System, "Linux filesystem plugin" do
24
24
  allow(@plugin).to receive(:collect_os).and_return(:linux)
25
25
 
26
26
  allow(@plugin).to receive(:shell_out).with("df -P").and_return(mock_shell_out(0, "", ""))
27
- allow(@plugin).to receive(:shell_out).with("df -i").and_return(mock_shell_out(0, "", ""))
27
+ allow(@plugin).to receive(:shell_out).with("df -iP").and_return(mock_shell_out(0, "", ""))
28
28
  allow(@plugin).to receive(:shell_out).with("mount").and_return(mock_shell_out(0, "", ""))
29
29
  allow(File).to receive(:exist?).with("/bin/lsblk").and_return(false)
30
30
  allow(@plugin).to receive(:shell_out).with("blkid -s TYPE").and_return(mock_shell_out(0, "", ""))
@@ -81,12 +81,12 @@ tmpfs 126922 273 126649 1% /run
81
81
  none 126922 1 126921 1% /run/lock
82
82
  none 126922 1 126921 1% /run/shm
83
83
  DFi
84
- allow(@plugin).to receive(:shell_out).with("df -i").and_return(mock_shell_out(0, @inode_stdout, ""))
84
+ allow(@plugin).to receive(:shell_out).with("df -iP").and_return(mock_shell_out(0, @inode_stdout, ""))
85
85
  end
86
86
 
87
- it "should run df -P and df -i" do
87
+ it "should run df -P and df -iP" do
88
88
  expect(@plugin).to receive(:shell_out).ordered.with("df -P").and_return(mock_shell_out(0, @stdout, ""))
89
- expect(@plugin).to receive(:shell_out).ordered.with("df -i").and_return(mock_shell_out(0, @inode_stdout, ""))
89
+ expect(@plugin).to receive(:shell_out).ordered.with("df -iP").and_return(mock_shell_out(0, @inode_stdout, ""))
90
90
  @plugin.run
91
91
  end
92
92
 
@@ -115,17 +115,17 @@ DFi
115
115
  expect(@plugin[:filesystem]["/dev/mapper/sys.vg-special.lv"][:mount]).to eq("/special")
116
116
  end
117
117
 
118
- it "should set total_inodes to value from df -i" do
118
+ it "should set total_inodes to value from df -iP" do
119
119
  @plugin.run
120
120
  expect(@plugin[:filesystem]["/dev/mapper/sys.vg-special.lv"][:total_inodes]).to eq("124865")
121
121
  end
122
122
 
123
- it "should set inodes_used to value from df -i" do
123
+ it "should set inodes_used to value from df -iP" do
124
124
  @plugin.run
125
125
  expect(@plugin[:filesystem]["/dev/mapper/sys.vg-special.lv"][:inodes_used]).to eq("380")
126
126
  end
127
127
 
128
- it "should set inodes_available to value from df -i" do
128
+ it "should set inodes_available to value from df -iP" do
129
129
  @plugin.run
130
130
  expect(@plugin[:filesystem]["/dev/mapper/sys.vg-special.lv"][:inodes_available]).to eq("124485")
131
131
  end
@@ -115,6 +115,29 @@ lo Link encap:Local Loopback
115
115
  TX packets:524 errors:0 dropped:0 overruns:0 carrier:0
116
116
  collisions:0 txqueuelen:0
117
117
  RX bytes:35224 (34.3 KiB) TX bytes:35224 (34.3 KiB)
118
+
119
+ eth3 Link encap:Ethernet HWaddr E8:39:35:C5:C8:54
120
+ UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
121
+ RX packets:13395101 errors:0 dropped:0 overruns:0 frame:0
122
+ TX packets:9492909 errors:0 dropped:0 overruns:0 carrier:0
123
+ collisions:0 txqueuelen:1000
124
+ RX bytes:1325650573 (1.2 GiB) TX bytes:1666310189 (1.5 GiB)
125
+ Interrupt:36 Memory:f4800000-f4ffffff
126
+
127
+ ovs-system Link encap:Ethernet HWaddr 7A:7A:80:80:6C:24
128
+ BROADCAST MULTICAST MTU:1500 Metric:1
129
+ RX packets:0 errors:0 dropped:0 overruns:0 frame:0
130
+ TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
131
+ collisions:0 txqueuelen:0
132
+ RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)
133
+
134
+ xapi1 Link encap:Ethernet HWaddr E8:39:35:C5:C8:50
135
+ inet addr:192.168.13.34 Bcast:192.168.13.255 Mask:255.255.255.0
136
+ UP BROADCAST RUNNING MTU:1500 Metric:1
137
+ RX packets:160275 errors:0 dropped:0 overruns:0 frame:0
138
+ TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
139
+ collisions:0 txqueuelen:0
140
+ RX bytes:21515031 (20.5 MiB) TX bytes:2052 (2.0 KiB)
118
141
  '
119
142
  # Note that ifconfig shows foo:veth0@eth0 but fails to show any address information.
120
143
  # This was not a mistake collecting the output and Apparently ifconfig is broken in this regard.
@@ -198,6 +221,10 @@ default via 1111:2222:3333:4444::1 dev eth0.11 metric 1024
198
221
  link/void
199
222
  inet 127.0.0.2/32 scope host venet0
200
223
  inet 172.16.19.48/32 scope global venet0:0
224
+ 12: xapi1: <BROADCAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN
225
+ link/ether e8:39:35:c5:c8:50 brd ff:ff:ff:ff:ff:ff
226
+ inet 192.168.13.34/24 brd 192.168.13.255 scope global xapi1
227
+ valid_lft forever preferred_lft forever
201
228
  '
202
229
  }
203
230
 
@@ -233,6 +260,24 @@ default via 1111:2222:3333:4444::1 dev eth0.11 metric 1024
233
260
  1392844460 2659966 0 0 0 0
234
261
  TX: bytes packets errors dropped carrier collsns
235
262
  691785313 1919690 0 0 0 0
263
+ 10: eth3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master ovs-system state UP mode DEFAULT qlen 1000
264
+ link/ether e8:39:35:c5:c8:54 brd ff:ff:ff:ff:ff:ff
265
+ RX: bytes packets errors dropped overrun mcast
266
+ 1321907045 13357087 0 0 0 3126613
267
+ TX: bytes packets errors dropped carrier collsns
268
+ 1661526184 9467091 0 0 0 0
269
+ 11: ovs-system: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT
270
+ link/ether 7a:7a:80:80:6c:24 brd ff:ff:ff:ff:ff:ff
271
+ RX: bytes packets errors dropped overrun mcast
272
+ 0 0 0 0 0 0
273
+ TX: bytes packets errors dropped carrier collsns
274
+ 0 0 0 0 0 0
275
+ 12: xapi1: <BROADCAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN mode DEFAULT
276
+ link/ether e8:39:35:c5:c8:50 brd ff:ff:ff:ff:ff:ff
277
+ RX: bytes packets errors dropped overrun mcast
278
+ 21468183 159866 0 0 0 0
279
+ TX: bytes packets errors dropped carrier collsns
280
+ 2052 6 0 0 0 0
236
281
  '
237
282
  }
238
283
 
@@ -268,11 +313,21 @@ fe80::21c:eff:fe12:3456 dev eth0.153 lladdr 00:1c:0e:30:28:00 router REACHABLE
268
313
  allow(plugin).to receive(:shell_out).with("arp -an").and_return(mock_shell_out(0, linux_arp_an, ""))
269
314
  end
270
315
 
316
+ describe "#iproute2_binary_available?" do
317
+ ["/sbin/ip", "/usr/bin/ip"].each do |path|
318
+ it "accepts #{path}" do
319
+ allow(File).to receive(:exist?).and_return(false)
320
+ allow(File).to receive(:exist?).with(path).and_return(true)
321
+ expect(plugin.iproute2_binary_available?).to be_truthy
322
+ end
323
+ end
324
+ end
325
+
271
326
  ["ifconfig","iproute2"].each do |network_method|
272
327
 
273
328
  describe "gathering IP layer address info via #{network_method}" do
274
329
  before(:each) do
275
- allow(File).to receive(:exist?).with("/sbin/ip").and_return( network_method == "iproute2" )
330
+ allow(plugin).to receive(:iproute2_binary_available?).and_return( network_method == "iproute2" )
276
331
  plugin.run
277
332
  end
278
333
 
@@ -282,7 +337,7 @@ fe80::21c:eff:fe12:3456 dev eth0.153 lladdr 00:1c:0e:30:28:00 router REACHABLE
282
337
  end
283
338
 
284
339
  it "detects the interfaces" do
285
- expect(plugin['network']['interfaces'].keys.sort).to eq(["eth0", "eth0.11", "eth0.151", "eth0.152", "eth0.153", "eth0:5", "foo:veth0@eth0", "lo", "tun0", "venet0", "venet0:0"])
340
+ expect(plugin['network']['interfaces'].keys.sort).to eq(["eth0", "eth0.11", "eth0.151", "eth0.152", "eth0.153", "eth0:5", "eth3", "foo:veth0@eth0", "lo", "ovs-system", "tun0", "venet0", "venet0:0", "xapi1"])
286
341
  end
287
342
 
288
343
  it "detects the ipv4 addresses of the ethernet interface" do
@@ -378,7 +433,7 @@ fe80::21c:eff:fe12:3456 dev eth0.153 lladdr 00:1c:0e:30:28:00 router REACHABLE
378
433
 
379
434
  describe "gathering interface counters via #{network_method}" do
380
435
  before(:each) do
381
- allow(File).to receive(:exist?).with("/sbin/ip").and_return( network_method == "iproute2" )
436
+ allow(plugin).to receive(:iproute2_binary_available?).and_return( network_method == "iproute2" )
382
437
  plugin.run
383
438
  end
384
439
 
@@ -416,7 +471,7 @@ fe80::21c:eff:fe12:3456 dev eth0.153 lladdr 00:1c:0e:30:28:00 router REACHABLE
416
471
 
417
472
  describe "setting the node's default IP address attribute with #{network_method}" do
418
473
  before(:each) do
419
- allow(File).to receive(:exist?).with("/sbin/ip").and_return( network_method == "iproute2" )
474
+ allow(plugin).to receive(:iproute2_binary_available?).and_return( network_method == "iproute2" )
420
475
  plugin.run
421
476
  end
422
477
 
@@ -532,6 +587,10 @@ Destination Gateway Genmask Flags Metric Ref Use Iface
532
587
  expect(plugin['network']['interfaces']['eth0.11']['state']).to eq('up')
533
588
  end
534
589
 
590
+ it "detects interfaces only visible via ip link" do
591
+ expect(plugin['network']['interfaces']['eth3']['state']).to eq('up')
592
+ end
593
+
535
594
  describe "when dealing with routes" do
536
595
  it "adds routes" do
537
596
  plugin.run
@@ -170,6 +170,12 @@ describe Ohai::System, "Linux plugin platform" do
170
170
  expect(@plugin[:platform_family]).to eq("arch")
171
171
  end
172
172
 
173
+ it "should set platform_version to kernel release" do
174
+ expect(@plugin).to receive(:`).with('uname -r').and_return('3.18.2-2-ARCH')
175
+ @plugin.run
176
+ expect(@plugin[:platform_version]).to eq('3.18.2-2-ARCH')
177
+ end
178
+
173
179
  end
174
180
 
175
181
  describe "on gentoo" do
@@ -197,6 +203,13 @@ describe Ohai::System, "Linux plugin platform" do
197
203
  expect(@plugin[:platform]).to eq("exherbo")
198
204
  expect(@plugin[:platform_family]).to eq("exherbo")
199
205
  end
206
+
207
+ it "should set platform_version to kernel release" do
208
+ expect(@plugin).to receive(:`).with('uname -r').and_return('3.18.2-2-ARCH')
209
+ @plugin.run
210
+ expect(@plugin[:platform_version]).to eq('3.18.2-2-ARCH')
211
+ end
212
+
200
213
  end
201
214
 
202
215
  describe "on redhat breeds" do
@@ -33,6 +33,8 @@ describe Ohai::System, "Linux virtualization platform" do
33
33
  allow(File).to receive(:exists?).with("/proc/bc/0").and_return(false)
34
34
  allow(File).to receive(:exists?).with("/proc/vz").and_return(false)
35
35
  allow(File).to receive(:exists?).with("/proc/self/cgroup").and_return(false)
36
+ allow(File).to receive(:exists?).with("/.dockerenv").and_return(false)
37
+ allow(File).to receive(:exists?).with("/.dockerinit").and_return(false)
36
38
  end
37
39
 
38
40
  describe "when we are checking for xen" do
@@ -204,6 +206,25 @@ VBOX
204
206
  expect(@plugin[:virtualization][:systems][:vbox]).to eq("guest")
205
207
  end
206
208
 
209
+ it "should set openstack guest if dmidecode detects OpenStack" do
210
+ openstack_dmidecode=<<-OPENSTACK
211
+ System Information
212
+ Manufacturer: Red Hat Inc.
213
+ Product Name: OpenStack Nova
214
+ Version: 2014.1.2-1.el6
215
+ Serial Number: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
216
+ UUID: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
217
+ Wake-up Type: Power Switch
218
+ SKU Number: Not Specified
219
+ Family: Red Hat Enterprise Linux
220
+ OPENSTACK
221
+ allow(@plugin).to receive(:shell_out).with("dmidecode").and_return(mock_shell_out(0, openstack_dmidecode, ""))
222
+ @plugin.run
223
+ expect(@plugin[:virtualization][:system]).to eq("openstack")
224
+ expect(@plugin[:virtualization][:role]).to eq("guest")
225
+ expect(@plugin[:virtualization][:systems][:openstack]).to eq("guest")
226
+ end
227
+
207
228
  it "should run dmidecode and not set virtualization if nothing is detected" do
208
229
  allow(@plugin).to receive(:shell_out).with("dmidecode").and_return(mock_shell_out(0, "", ""))
209
230
  @plugin.run
@@ -338,27 +359,6 @@ CGROUP
338
359
  expect(@plugin[:virtualization][:systems][:lxc]).to eq("guest")
339
360
  end
340
361
 
341
- it "should set lxc guest if /proc/self/cgroup exist and there are /docker/<name> mounts" do
342
- self_cgroup=<<-CGROUP
343
- 11:hugetlb:/
344
- 10:perf_event:/
345
- 9:blkio:/
346
- 8:net_cls:/
347
- 7:freezer:/
348
- 6:devices:/
349
- 5:memory:/
350
- 4:cpuacct,cpu:/docker/9c2adaa4c391ec0d3bf994fbd91ff30c3d317694d179e5b1dc7e1e4c8ed56b61
351
- 3:cpuset:/
352
- 2:name=systemd:/system.slice/docker.service
353
- CGROUP
354
- expect(File).to receive(:exists?).with("/proc/self/cgroup").and_return(true)
355
- allow(File).to receive(:read).with("/proc/self/cgroup").and_return(self_cgroup)
356
- @plugin.run
357
- expect(@plugin[:virtualization][:system]).to eq("lxc")
358
- expect(@plugin[:virtualization][:role]).to eq("guest")
359
- expect(@plugin[:virtualization][:systems][:lxc]).to eq("guest")
360
- end
361
-
362
362
  it "should set not set anything if /proc/self/cgroup exist and the cgroup is named arbitrarily, it isn't necessarily lxc." do
363
363
  self_cgroup=<<-CGROUP
364
364
  8:blkio:/Charlie
@@ -427,6 +427,131 @@ CGROUP
427
427
  end
428
428
  end
429
429
 
430
+ describe "when we are checking for docker" do
431
+ it "should set docker guest if /proc/self/cgroup exist and there are /docker/<hexadecimal> mounts" do
432
+ self_cgroup=<<-CGROUP
433
+ 8:blkio:/docker/baa660ed81bc81d262ac6e19486142aeec5fce2043e2a173eb2505c6fbed89bc
434
+ 7:net_cls:/docker/baa660ed81bc81d262ac6e19486142aeec5fce2043e2a173eb2505c6fbed89bc
435
+ 6:freezer:/docker/baa660ed81bc81d262ac6e19486142aeec5fce2043e2a173eb2505c6fbed89bc
436
+ 5:devices:/docker/baa660ed81bc81d262ac6e19486142aeec5fce2043e2a173eb2505c6fbed89bc
437
+ 4:memory:/docker/baa660ed81bc81d262ac6e19486142aeec5fce2043e2a173eb2505c6fbed89bc
438
+ 3:cpuacct:/docker/baa660ed81bc81d262ac6e19486142aeec5fce2043e2a173eb2505c6fbed89bc
439
+ 2:cpu:/docker/baa660ed81bc81d262ac6e19486142aeec5fce2043e2a173eb2505c6fbed89bc
440
+ 1:cpuset:/
441
+ CGROUP
442
+ allow(File).to receive(:exists?).with("/proc/self/cgroup").and_return(true)
443
+ allow(File).to receive(:read).with("/proc/self/cgroup").and_return(self_cgroup)
444
+ @plugin.run
445
+ expect(@plugin[:virtualization][:system]).to eq("docker")
446
+ expect(@plugin[:virtualization][:role]).to eq("guest")
447
+ expect(@plugin[:virtualization][:systems][:docker]).to eq("guest")
448
+ end
449
+
450
+ it "should set docker guest if /proc/self/cgroup exist and there are /docker/<name> mounts" do
451
+ self_cgroup=<<-CGROUP
452
+ 8:blkio:/docker/vanilla
453
+ 7:net_cls:/docker/vanilla
454
+ 6:freezer:/docker/vanilla
455
+ 5:devices:/docker/vanilla
456
+ 4:memory:/docker/vanilla
457
+ 3:cpuacct:/docker/vanilla
458
+ 2:cpu:/docker/vanilla
459
+ 1:cpuset:/docker/vanilla
460
+ CGROUP
461
+ allow(File).to receive(:exists?).with("/proc/self/cgroup").and_return(true)
462
+ allow(File).to receive(:read).with("/proc/self/cgroup").and_return(self_cgroup)
463
+ @plugin.run
464
+ expect(@plugin[:virtualization][:system]).to eq("docker")
465
+ expect(@plugin[:virtualization][:role]).to eq("guest")
466
+ expect(@plugin[:virtualization][:systems][:docker]).to eq("guest")
467
+ end
468
+
469
+ it "should set not set anything if /proc/self/cgroup exist and the cgroup is named arbitrarily, it isn't necessarily lxc." do
470
+ self_cgroup=<<-CGROUP
471
+ 8:blkio:/Charlie
472
+ 7:net_cls:/Charlie
473
+ 6:freezer:/Charlie
474
+ 5:devices:/Charlie
475
+ 4:memory:/Charlie
476
+ 3:cpuacct:/Charlie
477
+ 2:cpu:/Charlie
478
+ 1:cpuset:/Charlie
479
+ CGROUP
480
+ allow(File).to receive(:exists?).with("/proc/self/cgroup").and_return(true)
481
+ allow(File).to receive(:read).with("/proc/self/cgroup").and_return(self_cgroup)
482
+ @plugin.run
483
+ expect(@plugin[:virtualization]).to eq({'systems' => {}})
484
+ end
485
+
486
+ context "/proc/self/cgroup only has / mounts" do
487
+ before(:each) do
488
+ self_cgroup=<<-CGROUP
489
+ 8:blkio:/
490
+ 7:net_cls:/
491
+ 6:freezer:/
492
+ 5:devices:/
493
+ 4:memory:/
494
+ 3:cpuacct:/
495
+ 2:cpu:/
496
+ 1:cpuset:/
497
+ CGROUP
498
+ allow(File).to receive(:exists?).with("/proc/self/cgroup").and_return(true)
499
+ allow(File).to receive(:read).with("/proc/self/cgroup").and_return(self_cgroup)
500
+ @plugin.run
501
+ expect(@plugin[:virtualization]).to eq({'systems' => {}})
502
+ end
503
+
504
+ end
505
+
506
+ it "does not set the old virtualization attributes if they are already set" do
507
+ allow(@plugin).to receive(:docker_exists?).and_return("/usr/bin/docker")
508
+ @plugin[:virtualization] = Mash.new
509
+ @plugin[:virtualization][:system] = "the cloud"
510
+ @plugin[:virtualization][:role] = "cumulonimbus"
511
+ @plugin.run
512
+ expect(@plugin[:virtualization][:system]).not_to eq("docker")
513
+ expect(@plugin[:virtualization][:role]).not_to eq("host")
514
+ end
515
+
516
+ it "does not set docker host if docker does not exist" do
517
+ allow(@plugin).to receive(:docker_exists?).and_return(false)
518
+ @plugin.run
519
+ expect(@plugin[:virtualization][:system]).to be_nil
520
+ expect(@plugin[:virtualization][:role]).to be_nil
521
+ expect(@plugin[:virtualization]).to eq({'systems' => {}})
522
+ end
523
+
524
+ it "should not set virtualization if /proc/self/cgroup isn't there" do
525
+ allow(File).to receive(:exists?).with("/proc/self/cgroup").and_return(false)
526
+ @plugin.run
527
+ expect(@plugin[:virtualization]).to eq({'systems' => {}})
528
+ end
529
+
530
+ it "should set virtualization if /.dockerenv exists" do
531
+ allow(File).to receive(:exists?).with("/.dockerenv").and_return(true)
532
+ @plugin.run
533
+ expect(@plugin[:virtualization][:system]).to eq("docker")
534
+ expect(@plugin[:virtualization][:role]).to eq("guest")
535
+ expect(@plugin[:virtualization][:systems][:docker]).to eq("guest")
536
+ end
537
+
538
+ it "should set virtualization if /.dockerinit exists" do
539
+ allow(File).to receive(:exists?).with("/.dockerinit").and_return(true)
540
+ @plugin.run
541
+ expect(@plugin[:virtualization][:system]).to eq("docker")
542
+ expect(@plugin[:virtualization][:role]).to eq("guest")
543
+ expect(@plugin[:virtualization][:systems][:docker]).to eq("guest")
544
+ end
545
+
546
+ it "should not set virtualization if /.dockerenv or /.dockerinit doesn't exists" do
547
+ allow(File).to receive(:exists?).with("/.dockerenv").and_return(false)
548
+ allow(File).to receive(:exists?).with("/.dockerinit").and_return(false)
549
+ @plugin.run
550
+ expect(@plugin[:virtualization]).to eq({'systems' => {}})
551
+ end
552
+
553
+ end
554
+
430
555
  it "should not set virtualization if no tests match" do
431
556
  @plugin.run
432
557
  expect(@plugin[:virtualization]).to eq({'systems' => {}})
@@ -25,7 +25,11 @@ describe Ohai::System, "plugin php" do
25
25
  before(:each) do
26
26
  @plugin = get_plugin("php")
27
27
  @plugin[:languages] = Mash.new
28
- @stdout = "PHP 5.1.6 (cli) (built: Jul 16 2008 19:52:52)\nCopyright (c) 1997-2006 The PHP Group\nZend Engine v2.1.0, Copyright (c) 1998-2006 Zend Technologies\n"
28
+ @stdout = <<-OUT
29
+ PHP 5.1.6 (cli) (built: Jul 16 2008 19:52:52)
30
+ Copyright (c) 1997-2006 The PHP Group
31
+ Zend Engine v2.1.0, Copyright (c) 1998-2006 Zend Technologies
32
+ OUT
29
33
  allow(@plugin).to receive(:shell_out).with("php -v").and_return(mock_shell_out(0, @stdout, ""))
30
34
  end
31
35
 
@@ -40,17 +44,47 @@ describe Ohai::System, "plugin php" do
40
44
  end
41
45
 
42
46
  it "should not set the languages[:php] tree up if php command fails" do
43
- @stdout = "PHP 5.1.6 (cli) (built: Jul 16 2008 19:52:52)\nCopyright (c) 1997-2006 The PHP Group\nZend Engine v2.1.0, Copyright (c) 1998-2006 Zend Technologies\n"
47
+ @stdout = <<-OUT
48
+ PHP 5.1.6 (cli) (built: Jul 16 2008 19:52:52)
49
+ Copyright (c) 1997-2006 The PHP Group
50
+ Zend Engine v2.1.0, Copyright (c) 1998-2006 Zend Technologies
51
+ OUT
44
52
  allow(@plugin).to receive(:shell_out).with("php -v").and_return(mock_shell_out(1, @stdout, ""))
45
53
  @plugin.run
46
54
  expect(@plugin.languages).not_to have_key(:php)
47
55
  end
48
56
 
49
57
  it "should parse builddate even if it's suhosin patched" do
50
- @stdout = "PHP 5.3.27 with Suhosin-Patch (cli) (built: Aug 30 2013 04:30:30) \nCopyright (c) 1997-2013 The PHP Group\nZend Engine v2.3.0, Copyright (c) 1998-2013 Zend Technologies"
58
+ @stdout = <<-OUT
59
+ PHP 5.3.27 with Suhosin-Patch (cli) (built: Aug 30 2013 04:30:30)
60
+ Copyright (c) 1997-2013 The PHP Group
61
+ Zend Engine v2.3.0, Copyright (c) 1998-2013 Zend Technologies
62
+ OUT
51
63
  allow(@plugin).to receive(:shell_out).with("php -v").and_return(mock_shell_out(0, @stdout, ""))
52
64
  @plugin.run
53
65
  expect(@plugin.languages[:php][:builddate]).to eql("Aug 30 2013 04:30:30")
54
66
  end
55
67
 
68
+ it "should not set zend_optcache_version if not compiled with opcache" do
69
+ @stdout = <<-OUT
70
+ PHP 5.1.6 (cli) (built: Jul 16 2008 19:52:52)
71
+ Copyright (c) 1997-2006 The PHP Group
72
+ Zend Engine v2.1.0, Copyright (c) 1998-2006 Zend Technologies
73
+ OUT
74
+ allow(@plugin).to receive(:shell_out).with("php -v").and_return(mock_shell_out(0, @stdout, ""))
75
+ @plugin.run
76
+ expect(@plugin.languages[:php]).not_to have_key(:zend_opcache_version)
77
+ end
78
+
79
+ it "should parse zend_optcache_version if compiled with opcache" do
80
+ @stdout = <<-OUT
81
+ PHP 5.5.9-1ubuntu4.5 (cli) (built: Oct 29 2014 11:59:10)
82
+ Copyright (c) 1997-2014 The PHP Group
83
+ Zend Engine v2.5.0, Copyright (c) 1998-2014 Zend Technologies
84
+ with Zend OPcache v7.0.3, Copyright (c) 1999-2014, by Zend Technologies
85
+ OUT
86
+ allow(@plugin).to receive(:shell_out).with("php -v").and_return(mock_shell_out(0, @stdout, ""))
87
+ @plugin.run
88
+ expect(@plugin.languages[:php][:zend_opcache_version]).to eql("7.0.3")
89
+ end
56
90
  end