summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdam Edwards <adamed@opscode.com>2014-05-13 11:08:04 -0700
committerAdam Edwards <adamed@opscode.com>2014-05-13 11:08:04 -0700
commitf1ae446142dbfaa19222c369c32ddefb43466b3c (patch)
tree5232effc0eab059b329b74d9b828bbc8bc395528
parent2582f58b72527246f81af2bc4913182b11a3c423 (diff)
downloadwmi-lite-f1ae446142dbfaa19222c369c32ddefb43466b3c.tar.gz
Basic unit test
-rw-r--r--lib/wmi_lite/wmi.rb2
-rw-r--r--lib/wmi_lite/wmi/wmi_instance.rb2
-rw-r--r--spec/unit/wmi_spec.rb84
-rw-r--r--wmi-lite.gemspec2
4 files changed, 80 insertions, 10 deletions
diff --git a/lib/wmi_lite/wmi.rb b/lib/wmi_lite/wmi.rb
index 4a30573..57c1ab2 100644
--- a/lib/wmi_lite/wmi.rb
+++ b/lib/wmi_lite/wmi.rb
@@ -62,7 +62,7 @@ module WmiLite
end
def wmi_result_to_snapshot(wmi_object)
- snapshot = Instance.wmi_ole_object_to_hash(wmi_object)
+ snapshot = Instance.new(wmi_object)
end
end
end
diff --git a/lib/wmi_lite/wmi/wmi_instance.rb b/lib/wmi_lite/wmi/wmi_instance.rb
index d0b0474..88228c7 100644
--- a/lib/wmi_lite/wmi/wmi_instance.rb
+++ b/lib/wmi_lite/wmi/wmi_instance.rb
@@ -38,7 +38,7 @@ module WmiLite
property_map[property.name.downcase] = wmi_object.invoke(property.name)
end
- property_map[:wmi_object] = wmi_object
+ @wmi_ole_object = wmi_object
property_map.freeze
end
diff --git a/spec/unit/wmi_spec.rb b/spec/unit/wmi_spec.rb
index be79e30..cc26262 100644
--- a/spec/unit/wmi_spec.rb
+++ b/spec/unit/wmi_spec.rb
@@ -16,21 +16,89 @@
# limitations under the License.
#
-require 'wmi_lite/wmi'
+require 'spec_helper'
describe WmiLite::Wmi do
- let(:wbem_connection) { double 'WIN32OLE', :ExecQuery => [] }
let(:wbem_locator) { double 'WIN32OLE', :ConnectServer => wbem_connection }
-
- before do
- WIN32OLE.stub(:new).and_return(wbem_locator)
+ let(:wmi_query_instance1) { double 'Wmi::Instance', :wmi_ole_object => native_query_instance1, :[] => native_properties1 }
+ let(:wmi_query_instance2) { double 'Wmi::Instance', :wmi_ole_object => native_query_instance2, :[] => native_properties2 }
+ let(:wmi_query_result1) { [ wmi_query_instance1 ].to_enum }
+ let(:wmi_query_result2) { [ wmi_query_instance1, wmi_query_instance2 ].to_enum }
+ let(:native_query_result1) { [ native_query_instance1 ].to_enum }
+ let(:native_query_result2) { [ native_query_instance1, native_query_instance2 ].to_enum }
+ let(:wmi_query_result_empty) { [].to_enum }
+ let(:native_properties1) { wmi_properties1.map { | property, value | double 'WIN32OLE', :name => property } }
+ let(:native_properties2) { wmi_properties2.map { | property, value | double 'WIN32OLE', :name => property } }
+ let(:native_query_instance1) { double 'WIN32OLE', :properties_ => native_properties1, :invoke => 'value1' }
+ let(:native_query_instance2) { double 'WIN32OLE', :properties_ => native_properties2, :invoke => 'value2' }
+ let(:wbem_connection) { double 'WIN32OLE', :ExecQuery => native_query_result }
+
+ def validate_query_result(actual, expected)
+ expected_result = actual.count == expected.count
+
+ index = 0
+ if expected_result
+ expected.each do | expected_value |
+ actual_value = actual[index]
+ expected_value.invoke == actual_value.wmi_ole_object.invoke
+ expected_value.properties_.each do | expected_property |
+ if actual_value[expected_property.name].nil?
+ expected_result = false
+ end
+ if !! actual_value.wmi_ole_object.properties_.find { | actual_property | actual_property == expected_property.name }
+ expected_result = false
+ end
+ if ! expected_result
+ break
+ end
+ end
+ index += 1
+ end
+ end
+
+ expected_result
+ end
+
+ before(:each) do
+ WIN32OLE.stub(:new).with("WbemScripting.SWbemLocator").and_return(wbem_locator)
end
let(:wmi) { WmiLite::Wmi.new }
-
+ let(:wmi_query_result) { wmi_query_result_empty }
+ let(:native_query_result) { [].to_enum }
+
it "should not fail with empty query results" do
- result = wmi.query('')
- expect( result ).to eq([])
+ results = wmi.query('')
+ result_count = 0
+ results.each { | result | result_count += 1 }
+
+ expect( result_count ).to eq(0)
end
+
+ shared_examples_for "the first method" do
+
+ let(:wmi_properties1) { { 'cores' => 4, 'name' => 'mycomputer1', 'diskspace' => 400, 'os' => 'windows' } }
+ let(:wmi_properties2) { { 'cores' => 2, 'name' => 'mycomputer2', 'bios' => 'ami', 'os' => 'windows' } }
+ let(:native_query_result) { [].to_enum }
+
+ it "should not fail with empty query results" do
+ results = wmi.first_of('vm')
+ expect( results ).to eq(nil)
+ end
+
+ context "when returning one instance in the query" do
+ let(:wmi_query_result) { wmi_query_result1 }
+ let(:native_query_result) { native_query_result1 }
+
+ it "should get one instance" do
+ results = wmi.first_of('vm')
+ expected_result = WmiLite::Wmi::Instance.new(native_query_result.first)
+ is_expected = validate_query_result([results], [expected_result.wmi_ole_object])
+ expect(is_expected).to eq(true)
+ end
+ end
+ end
+
+ it_should_behave_like "the first method"
end
diff --git a/wmi-lite.gemspec b/wmi-lite.gemspec
index 39a811c..02aa320 100644
--- a/wmi-lite.gemspec
+++ b/wmi-lite.gemspec
@@ -28,4 +28,6 @@ Gem::Specification.new do |spec|
spec.add_development_dependency 'bundler', '~> 1.3'
spec.add_development_dependency 'rspec'
spec.add_development_dependency 'rake'
+ spec.add_development_dependency 'pry'
+ spec.add_development_dependency 'pry-debugger'
end