spec/unit/memory_spec.rb in facter-1.6.18 vs spec/unit/memory_spec.rb in facter-1.7.0.rc1
- old
+ new
@@ -1,50 +1,199 @@
#! /usr/bin/env ruby
require 'spec_helper'
describe "Memory facts" do
- before do
- # We need these facts loaded, but they belong to a file with a
- # different name, so load the file explicitly.
- Facter.collection.loader.load(:memory)
- end
-
after do
Facter.clear
end
- it "should return the current swap size" do
+ describe "when returning scaled sizes" do
+ before(:each) do
+ Facter.collection.internal_loader.load(:memory)
+ end
- Facter.fact(:kernel).stubs(:value).returns("Darwin")
- Facter::Util::Resolution.stubs(:exec).with('sysctl vm.swapusage').returns("vm.swapusage: total = 64.00M used = 0.00M free = 64.00M (encrypted)")
- swapusage = "vm.swapusage: total = 64.00M used = 0.00M free = 64.00M (encrypted)"
+ [ "memorysize",
+ "memoryfree",
+ "swapsize",
+ "swapfree"
+ ].each do |fact|
- if swapusage =~ /total = (\S+).*/
- Facter.fact(:swapfree).value.should == $1
+ describe "when #{fact}_mb does not exist" do
+ before(:each) do
+ Facter.fact(fact + "_mb").stubs(:value).returns(nil)
+ end
+
+ it "#{fact} should not exist either" do
+ Facter.fact(fact).value.should be_nil
+ end
+ end
+
+ { "200.00" => "200.00 MB",
+ "1536.00" => "1.50 GB",
+ "1572864.00" => "1.50 TB",
+ }.each do |mbval, scval|
+ it "should scale #{fact} when given #{mbval} MB" do
+ Facter.fact(fact + "_mb").stubs(:value).returns(mbval)
+ Facter.fact(fact).value.should == scval
+ end
+ end
end
+
+ after(:each) do
+ Facter.clear
+ end
end
- it "should return the current swap free" do
- Facter.fact(:kernel).stubs(:value).returns("Darwin")
- Facter::Util::Resolution.stubs(:exec).with('sysctl vm.swapusage').returns("vm.swapusage: total = 64.00M used = 0.00M free = 64.00M (encrypted)")
- swapusage = "vm.swapusage: total = 64.00M used = 0.00M free = 64.00M (encrypted)"
+ describe "on Darwin" do
+ before(:each) do
+ Facter.fact(:kernel).stubs(:value).returns("Darwin")
+ Facter::Util::Resolution.stubs(:exec).with('sysctl -n hw.memsize').returns('8589934592')
+ sample_vm_stat = <<VMSTAT
+Mach Virtual Memory Statistics: (page size of 4096 bytes)
+Pages free: 28430.
+Pages active: 1152576.
+Pages inactive: 489054.
+Pages speculative: 7076.
+Pages wired down: 418217.
+"Translation faults": 1340091228.
+Pages copy-on-write: 16851357.
+Pages zero filled: 665168768.
+Pages reactivated: 3082708.
+Pageins: 13862917.
+Pageouts: 1384383.
+Object cache: 14 hits of 2619925 lookups (0% hit rate)
+VMSTAT
+ Facter::Util::Resolution.stubs(:exec).with('vm_stat').returns(sample_vm_stat)
+ Facter::Util::Resolution.stubs(:exec).with('sysctl vm.swapusage').returns("vm.swapusage: total = 64.00M used = 1.00M free = 63.00M (encrypted)")
- if swapusage =~ /free = (\S+).*/
- Facter.fact(:swapfree).value.should == $1
+ Facter.collection.internal_loader.load(:memory)
end
+
+ it "should return the current swap size in MB" do
+ Facter.fact(:swapsize_mb).value.should == "64.00"
+ end
+
+ it "should return the current swap free in MB" do
+ Facter.fact(:swapfree_mb).value.should == "63.00"
+ end
+
+ it "should return whether swap is encrypted" do
+ Facter.fact(:swapencrypted).value.should == true
+ end
+
+ it "should return the memory size in MB" do
+ Facter.fact(:memorysize_mb).value.should == "8192.00"
+ end
+
+ it "should return the memory free in MB" do
+ Facter.fact(:memoryfree_mb).value.should == "138.70"
+ end
+
+ after(:each) do
+ Facter.clear
+ end
end
- it "should return whether swap is encrypted" do
- Facter.fact(:kernel).stubs(:value).returns("Darwin")
- Facter::Util::Resolution.stubs(:exec).with('sysctl vm.swapusage').returns("vm.swapusage: total = 64.00M used = 0.00M free = 64.00M (encrypted)")
- swapusage = "vm.swapusage: total = 64.00M used = 0.00M free = 64.00M (encrypted)"
+ [ "linux",
+ "gnu/kfreebsd",
+ ].each do |kernel|
- swapusage =~ /\(encrypted\)/
- Facter.fact(:swapencrypted).value.should == true
+
+ describe "on #{kernel}" do
+ before(:each) do
+ Facter.clear
+ Facter.fact(:kernel).stubs(:value).returns(kernel)
+ meminfo = <<INFO
+MemTotal: 255908 kB
+MemFree: 69936 kB
+Buffers: 15812 kB
+Cached: 115124 kB
+SwapCached: 0 kB
+Active: 92700 kB
+Inactive: 63792 kB
+SwapTotal: 524280 kB
+SwapFree: 524280 kB
+Dirty: 4 kB
+INFO
+
+ File.stubs(:readlines).with("/proc/meminfo").returns(meminfo.split("\n"))
+
+ Facter.collection.internal_loader.load(:memory)
+ end
+
+ after(:each) do
+ Facter.clear
+ end
+
+ it "should return the current memory size in MB" do
+ Facter.fact(:memorysize_mb).value.should == "249.91"
+ end
+
+ it "should return the current memory free in MB" do
+ Facter.fact(:memoryfree_mb).value.should == "196.16"
+ end
+
+ it "should return the current swap size in MB" do
+ Facter.fact(:swapsize_mb).value.should == "511.99"
+ end
+
+ it "should return the current swap free in MB" do
+ Facter.fact(:swapfree_mb).value.should == "511.99"
+ end
+ end
end
+ describe "on AIX" do
+ before (:each) do
+ Facter.clear
+ Facter.fact(:kernel).stubs(:value).returns("AIX")
+
+ swapusage = <<SWAP
+device maj,min total free
+/dev/hd6 10, 2 512MB 508MB
+SWAP
+
+ Facter::Util::Resolution.stubs(:exec).with('swap -l').returns(swapusage)
+
+ Facter.collection.internal_loader.load(:memory)
+ end
+
+ after(:each) do
+ Facter.clear
+ end
+
+ describe "when not root" do
+ before(:each) do
+ Facter.fact(:id).stubs(:value).returns("notroot")
+ end
+
+ it "should return nil for swap size" do
+ Facter.fact(:swapsize_mb).value.should be_nil
+ end
+
+ it "should return nil for swap free" do
+ Facter.fact(:swapfree_mb).value.should be_nil
+ end
+ end
+
+ describe "when root" do
+ before(:each) do
+ Facter.fact(:id).stubs(:value).returns("root")
+ end
+
+ it "should return the current swap size in MB" do
+ Facter.fact(:swapsize_mb).value.should == "512.00"
+ end
+
+ it "should return the current swap free in MB" do
+ Facter.fact(:swapfree_mb).value.should == "508.00"
+ end
+ end
+ end
+
+
describe "on OpenBSD" do
before :each do
Facter.clear
Facter.fact(:kernel).stubs(:value).returns("OpenBSD")
@@ -58,98 +207,316 @@
EOS
Facter::Util::Resolution.stubs(:exec).with('vmstat').returns(vmstat)
Facter::Util::Resolution.stubs(:exec).with("sysctl hw.physmem | cut -d'=' -f2").returns('267321344')
- Facter.collection.loader.load(:memory)
+ Facter.collection.internal_loader.load(:memory)
end
after :each do
Facter.clear
end
- it "should return the current swap free" do
- Facter.fact(:swapfree).value.should == "144.87 MB"
+ it "should return the current swap free in MB" do
+ Facter.fact(:swapfree_mb).value.should == "144.87"
end
- it "should return the current swap size" do
- Facter.fact(:swapsize).value.should == "144.87 MB"
+ it "should return the current swap size in MB" do
+ Facter.fact(:swapsize_mb).value.should == "144.87"
end
- it "should return the current memorysize" do
- Facter.fact(:memorysize).value.should == "254.94 MB"
+ it "should return the current memory free in MB" do
+ Facter.fact(:memoryfree_mb).value.should == "176.79"
end
+
+ it "should return the current memory size in MB" do
+ Facter.fact(:memorysize_mb).value.should == "254.94"
+ end
end
- describe "on DragonFly BSD" do
- before :each do
+ describe "on Solaris" do
+ before(:each) do
Facter.clear
- Facter.fact(:kernel).stubs(:value).returns("dragonfly")
+ Facter.fact(:kernel).stubs(:value).returns("SunOS")
+ sample_prtconf = <<PRTCONF
+System Configuration: Sun Microsystems sun4u
+Memory size: 2048 Megabytes
+System Peripherals (Software Nodes):
- swapusage = "total: 148342k bytes allocated = 0k used, 148342k available"
- Facter::Util::Resolution.stubs(:exec).with('/sbin/sysctl -n hw.pagesize').returns("4096")
- Facter::Util::Resolution.stubs(:exec).with('/sbin/sysctl -n vm.swap_size').returns("128461")
- Facter::Util::Resolution.stubs(:exec).with('/sbin/sysctl -n vm.swap_anon_use').returns("2635")
- Facter::Util::Resolution.stubs(:exec).with('/sbin/sysctl -n vm.swap_cache_use').returns("0")
+PRTCONF
+ Facter::Util::Resolution.stubs(:exec).with('/usr/sbin/prtconf 2>/dev/null').returns sample_prtconf
- vmstat = <<EOS
- procs memory page disks faults cpu
- r b w avm fre flt re pi po fr sr da0 sg1 in sy cs us sy id
- 0 0 0 33152 13940 1902120 2198 53119 11642 6544597 5460994 0 0 6148243 7087927 3484264 0 1 9
-EOS
- Facter::Util::Resolution.stubs(:exec).with('vmstat').returns(vmstat)
-
- Facter::Util::Resolution.stubs(:exec).with("sysctl -n hw.physmem").returns('248512512')
-
- Facter.collection.loader.load(:memory)
+ vmstat_lines = <<VMSTAT
+ kthr memory page disk faults cpu
+ r b w swap free re mf pi po fr de sr s0 s3 -- -- in sy cs us sy id
+ 0 0 0 1154552 476224 8 19 0 0 0 0 0 0 0 0 0 460 294 236 1 2 97
+VMSTAT
+ Facter::Util::Resolution.stubs(:exec).with('vmstat').returns(vmstat_lines)
end
- after :each do
+ after(:each) do
Facter.clear
end
- it "should return the current swap free" do
- Facter.fact(:swapfree).value.should == "491.51 MB"
+ describe "when single swap exists" do
+ before(:each) do
+ sample_swap_line = <<SWAP
+swapfile dev swaplo blocks free
+/dev/swap 4294967295,4294967295 16 2097136 2097136
+SWAP
+ Facter::Util::Resolution.stubs(:exec).with('/usr/sbin/swap -l').returns sample_swap_line
+
+ Facter.collection.internal_loader.load(:memory)
+ end
+
+ it "should return the current memory size in MB" do
+ Facter.fact(:memorysize_mb).value.should == "2048.00"
+ end
+
+ it "should return the current memory free in MB" do
+ Facter.fact(:memoryfree_mb).value.should == "465.06"
+ end
+
+ it "should return the current swap free in MB" do
+ Facter.fact(:swapfree_mb).value.should == "1023.99"
+ end
+
+ it "should return the current swap size in MB" do
+ Facter.fact(:swapsize_mb).value.should == "1023.99"
+ end
end
- it "should return the current swap size" do
- Facter.fact(:swapsize).value.should == "501.80 MB"
+ describe "when multiple swaps exist" do
+ before(:each) do
+ sample_swap_line = <<SWAP
+swapfile dev swaplo blocks free
+/dev/swap 4294967295,4294967295 16 2097136 2097136
+/dev/swap2 4294967295,4294967295 16 2097136 2097136
+SWAP
+ Facter::Util::Resolution.stubs(:exec).with('/usr/sbin/swap -l').returns sample_swap_line
+ Facter.collection.internal_loader.load(:memory)
+ end
+
+ it "should return the current memory size in MB" do
+ Facter.fact(:memorysize_mb).value.should == "2048.00"
+ end
+
+ it "should return the current memory free in MB" do
+ Facter.fact(:memoryfree_mb).value.should == "465.06"
+ end
+
+ it "should return the current swap free in MB" do
+ Facter.fact(:swapfree_mb).value.should == "2047.98"
+ end
+
+ it "should return the current swap size in MB" do
+ Facter.fact(:swapsize_mb).value.should == "2047.98"
+ end
end
- it "should return the current memorysize" do
- Facter.fact(:memorysize).value.should == "237.00 MB"
+ describe "when no swap exists" do
+ before(:each) do
+ Facter::Util::Resolution.stubs(:exec).with('/usr/sbin/swap -l').returns ""
+
+ Facter.collection.internal_loader.load(:memory)
+ end
+
+ it "should return the current memory size in MB" do
+ Facter.fact(:memorysize_mb).value.should == "2048.00"
+ end
+
+ it "should return the current memory free in MB" do
+ Facter.fact(:memoryfree_mb).value.should == "465.06"
+ end
+
+ it "should return 0 for the swap free in MB" do
+ Facter.fact(:swapfree_mb).value.should == "0.00"
+ end
+
+ it "should return 0 for the swap size in MB" do
+ Facter.fact(:swapsize_mb).value.should == "0.00"
+ end
end
end
- describe "on Windows" do
- before :each do
- Facter.clear
- Facter.fact(:kernel).stubs(:value).returns("windows")
- Facter.collection.loader.load(:memory)
+ describe "on DragonFly BSD" do
+ before :each do
+ Facter.clear
+ Facter.fact(:kernel).stubs(:value).returns("dragonfly")
- require 'facter/util/wmi'
+ swapusage = "total: 148342k bytes allocated = 0k used, 148342k available"
+ Facter::Util::Resolution.stubs(:exec).with('/sbin/sysctl -n hw.pagesize').returns("4096")
+ Facter::Util::Resolution.stubs(:exec).with('/sbin/sysctl -n vm.swap_size').returns("128461")
+ Facter::Util::Resolution.stubs(:exec).with('/sbin/sysctl -n vm.swap_anon_use').returns("2635")
+ Facter::Util::Resolution.stubs(:exec).with('/sbin/sysctl -n vm.swap_cache_use').returns("0")
+
+ vmstat = <<EOS
+ procs memory page disks faults cpu
+ r b w avm fre flt re pi po fr sr da0 sg1 in sy cs us sy id
+ 0 0 0 33152 13940 1902120 2198 53119 11642 6544597 5460994 0 0 6148243 7087927 3484264 0 1 9
+EOS
+ Facter::Util::Resolution.stubs(:exec).with('vmstat').returns(vmstat)
+
+ Facter::Util::Resolution.stubs(:exec).with("sysctl -n hw.physmem").returns('248512512')
+
+ Facter.collection.internal_loader.load(:memory)
+ end
+
+ after :each do
+ Facter.clear
+ end
+
+ it "should return the current swap free in MB" do
+ Facter.fact(:swapfree_mb).value.should == "491.51"
+ end
+
+ it "should return the current swap size in MB" do
+ Facter.fact(:swapsize_mb).value.should == "501.80"
+ end
+
+ it "should return the current memory size in MB" do
+ Facter.fact(:memorysize_mb).value.should == "237.00"
+ end
+
+ it "should return the current memory free in MB" do
+ Facter.fact(:memoryfree_mb).value.should == "13.61"
+ end
end
- it "should return free memory" do
- os = stubs 'os'
- os.stubs(:FreePhysicalMemory).returns("3415624")
- Facter::Util::WMI.stubs(:execquery).returns([os])
+ describe "on FreeBSD" do
+ before(:each) do
+ Facter.clear
+ Facter.fact(:kernel).stubs(:value).returns("FreeBSD")
- Facter.fact(:MemoryFree).value.should == '3.26 GB'
+ sample_vmstat = <<VM_STAT
+ procs memory page disks faults cpu
+ r b w avm fre flt re pi po fr sr da0 cd0 in sy cs us sy id
+ 1 0 0 207600 656640 10 0 0 0 13 0 0 0 51 164 257 0 1 99
+VM_STAT
+ Facter::Util::Resolution.stubs(:exec).with('vmstat -H').returns sample_vmstat
+ sample_physmem = <<PHYSMEM
+1056276480
+PHYSMEM
+ Facter::Util::Resolution.stubs(:exec).with('sysctl -n hw.physmem').returns sample_physmem
+ end
+
+ after(:each) do
+ Facter.clear
+ end
+
+ describe "with no swap" do
+ before(:each) do
+ sample_swapinfo = <<SWAP
+Device 1K-blocks Used Avail Capacity
+SWAP
+ Facter::Util::Resolution.stubs(:exec).with('swapinfo -k').returns sample_swapinfo
+
+ Facter.collection.internal_loader.load(:memory)
+ end
+
+ it "should return the current swap free in MB" do
+ Facter.fact(:swapfree_mb).value.should == "0.00"
+ end
+
+ it "should return the current swap size in MB" do
+ Facter.fact(:swapsize_mb).value.should == "0.00"
+ end
+
+ it "should return the current memory size in MB" do
+ Facter.fact(:memorysize_mb).value.should == "1007.34"
+ end
+
+ it "should return the current memory free in MB" do
+ Facter.fact(:memoryfree_mb).value.should == "641.25"
+ end
+ end
+
+ describe "with one swap" do
+ before(:each) do
+ sample_swapinfo = <<SWAP
+Device 1K-blocks Used Avail Capacity
+/dev/da0p3 2048540 0 1048540 0%
+SWAP
+ Facter::Util::Resolution.stubs(:exec).with('swapinfo -k').returns sample_swapinfo
+
+ Facter.collection.internal_loader.load(:memory)
+ end
+
+ it "should return the current swap free in MB" do
+ Facter.fact(:swapfree_mb).value.should == "1023.96"
+ end
+
+ it "should return the current swap size in MB" do
+ Facter.fact(:swapsize_mb).value.should == "2000.53"
+ end
+
+ it "should return the current memory size in MB" do
+ Facter.fact(:memorysize_mb).value.should == "1007.34"
+ end
+
+ it "should return the current memory free in MB" do
+ Facter.fact(:memoryfree_mb).value.should == "641.25"
+ end
+ end
+
+ describe "with multiple swaps" do
+ before(:each) do
+ sample_swapinfo = <<SWAP
+Device 1K-blocks Used Avail Capacity
+/dev/da0p3 2048540 0 1048540 0%
+/dev/da0p4 3048540 0 1048540 0%
+SWAP
+ Facter::Util::Resolution.stubs(:exec).with('swapinfo -k').returns sample_swapinfo
+
+ Facter.collection.internal_loader.load(:memory)
+ end
+
+ it "should return the current swap free in MB" do
+ Facter.fact(:swapfree_mb).value.should == "2047.93"
+ end
+
+ it "should return the current swap size in MB" do
+ Facter.fact(:swapsize_mb).value.should == "4977.62"
+ end
+
+ it "should return the current memory size in MB" do
+ Facter.fact(:memorysize_mb).value.should == "1007.34"
+ end
+
+ it "should return the current memory free in MB" do
+ Facter.fact(:memoryfree_mb).value.should == "641.25"
+ end
+ end
end
- it "should return total memory" do
- computer = stubs 'computer'
- computer.stubs(:TotalPhysicalMemory).returns("4193837056")
- Facter::Util::WMI.stubs(:execquery).returns([computer])
+ describe "on Windows" do
+ before :each do
+ Facter.clear
+ Facter.fact(:kernel).stubs(:value).returns("windows")
+ Facter.collection.internal_loader.load(:memory)
+ require 'facter/util/wmi'
+ end
- Facter.fact(:MemoryTotal).value.should == '3.91 GB'
+ it "should return free memory in MB" do
+ os = stubs 'os'
+ os.stubs(:FreePhysicalMemory).returns("3415624")
+ Facter::Util::WMI.stubs(:execquery).returns([os])
+
+ Facter.fact(:memoryfree_mb).value.should == '3335.57'
+ end
+
+ it "should return total memory in MB" do
+ computer = stubs 'computer'
+ computer.stubs(:TotalPhysicalMemory).returns("4193837056")
+ Facter::Util::WMI.stubs(:execquery).returns([computer])
+
+ Facter.fact(:memorysize_mb).value.should == '3999.55'
+ Facter.fact(:MemoryTotal).value.should == '3.91 GB'
end
end
it "should use the memorysize fact for the memorytotal fact" do
Facter.fact("memorysize").expects(:value).once.returns "yay"
Facter::Util::Resolution.expects(:exec).never
- Facter::Memory.expects(:meminfo_number).never
Facter.fact("memorytotal").value.should == "yay"
end
end