Project

General

Profile

Download (3.57 KB) Statistics
| Branch: | Tag: | Revision:
require 'test_helper'
require 'fact_importer_test_helper'

class StructuredFactImporterTest < ActiveSupport::TestCase
include FactImporterIsolation

attr_reader :importer

let(:host) { FactoryBot.create(:host) }

describe '#import!' do
test 'hash facts are imported' do
import 'structured' => {'one' => 'value', 'two' => {'two-deep' => 'nested'}}
assert_nil value('structured')
assert_equal 'value', value('structured::one')
assert_equal 'nested', value('structured::two::two-deep')
end

test 'creates compose (parent) facts' do
import 'structured' => {'one' => {'two' => 'value'}}

assert fact_value('structured').compose
assert_nil value('structured')
assert_nil fact_value('structured').fact_name.parent

assert fact_value('structured::one').compose
assert_nil value('structured::one')
assert_equal fact_value('structured').fact_name, fact_value('structured::one').fact_name.parent

refute fact_value('structured::one::two').compose
assert_equal 'value', value('structured::one::two')
assert_equal fact_value('structured::one').fact_name, fact_value('structured::one::two').fact_name.parent
end

test 'updates fact values within hashes' do
import 'structured' => {'one' => 'value'}
assert_equal 'value', value('structured::one')
import 'structured' => {'one' => 'changed'}
assert_equal 'changed', value('structured::one')

assert_equal 0, importer.counters[:deleted]
assert_equal 1, importer.counters[:updated]
assert_equal 0, importer.counters[:added]
end

test 'enables compose attribute of previously string facts' do
import 'structured' => 'value'
refute fact_value('structured').compose
assert_equal 'value', value('structured')

import 'structured' => {'one' => 'value'}
assert fact_value('structured').compose
assert_nil value('structured')
end
end

describe 'normalize' do
test 'has no effect on unstructured facts' do
importer = StructuredFactImporter.new(nil, 'a' => 'b')
assert_equal({'a' => 'b'}, importer.send(:facts))
end

test 'removes nil fact values' do
importer = StructuredFactImporter.new(nil, 'a' => nil)
assert_equal({}, importer.send(:facts))
end

test 'changes symbol keys to strings' do
importer = StructuredFactImporter.new(nil, :a => 'b')
assert_equal({'a' => 'b'}, importer.send(:facts))
end

test 'expands nested hash keys with separators' do
importer = StructuredFactImporter.new(nil, 'a' => {'b' => 'c'})
assert_equal({'a' => nil, 'a::b' => 'c'}, importer.send(:facts))
end

test 'changes non-string values to strings' do
importer = StructuredFactImporter.new(nil, :a => 1)
assert_equal({'a' => '1'}, importer.send(:facts))
end

test 'subtrees excluded properly' do
data = FactsData::HierarchicalPuppetStyleFacts.new
Setting.stubs(:[]).with(:excluded_facts).returns(data.filter)

facts = data.good_facts.deep_merge(data.ignored_facts)

importer = StructuredFactImporter.new(nil, facts)
actual_facts = importer.send(:facts)

assert_equal data.flat_result, actual_facts
end
end

def import(facts)
@importer = StructuredFactImporter.new(host, facts)
@importer.stubs(:fact_name_class).returns(FactName)
allow_transactions_for @importer
@importer.import!
end

def fact_value(fact)
FactValue.joins(:fact_name).where(:host_id => host.id, :fact_names => { :name => fact }).first
end

def value(fact)
fact_value(fact).try(:value)
end
end
(66-66/67)