From 615278f3365087e436ee5ea13e0d15bd60718038 Mon Sep 17 00:00:00 2001 From: "A. Wilcox" Date: Tue, 10 Oct 2023 23:30:18 -0500 Subject: hscript: Allow multiple inheritance This allows a HorizonScript to inherit from multiple files. Files are parsed in a system-defined, unspecified order, but all scripts of a given depth are guaranteed to be parsed before the next depth. --- tests/fixtures/0232-inherit-basic.installfile | 2 +- tests/fixtures/0236-inherit-relative.installfile | 2 +- tests/fixtures/0237-inherit-incomplete.installfile | 2 +- tests/fixtures/0238-inherit-override.installfile | 4 +-- tests/fixtures/0264-inherit-test-loop.installfile | 5 ++++ tests/spec/simulator_spec.rb | 7 ++++++ tests/spec/validator_spec.rb | 29 ++++++++++++++++++++++ 7 files changed, 46 insertions(+), 5 deletions(-) create mode 100644 tests/fixtures/0264-inherit-test-loop.installfile (limited to 'tests') diff --git a/tests/fixtures/0232-inherit-basic.installfile b/tests/fixtures/0232-inherit-basic.installfile index 64a4c6a..2e65f1e 100644 --- a/tests/fixtures/0232-inherit-basic.installfile +++ b/tests/fixtures/0232-inherit-basic.installfile @@ -1,3 +1,3 @@ arch ppc64 pkginstall kde x11 -inherit 0222-complete.installfile +inherit ../../fixtures/0222-complete.installfile diff --git a/tests/fixtures/0236-inherit-relative.installfile b/tests/fixtures/0236-inherit-relative.installfile index eb6fe27..1e2e9d1 100644 --- a/tests/fixtures/0236-inherit-relative.installfile +++ b/tests/fixtures/0236-inherit-relative.installfile @@ -1,2 +1,2 @@ arch ppc64 -inherit ../fixtures/0222-complete.installfile +inherit ../../fixtures/0222-complete.installfile diff --git a/tests/fixtures/0237-inherit-incomplete.installfile b/tests/fixtures/0237-inherit-incomplete.installfile index a4b1309..dd99b5d 100644 --- a/tests/fixtures/0237-inherit-incomplete.installfile +++ b/tests/fixtures/0237-inherit-incomplete.installfile @@ -1,2 +1,2 @@ arch ppc64 -inherit 0006-no-network.installfile +inherit ../../fixtures/0006-no-network.installfile diff --git a/tests/fixtures/0238-inherit-override.installfile b/tests/fixtures/0238-inherit-override.installfile index 161e8f8..14e8b06 100644 --- a/tests/fixtures/0238-inherit-override.installfile +++ b/tests/fixtures/0238-inherit-override.installfile @@ -1,3 +1,3 @@ arch ppc64 -hostname overriden.hostname.local -inherit 0222-complete.installfile +hostname overridden.hostname.local +inherit ../../fixtures/0222-complete.installfile diff --git a/tests/fixtures/0264-inherit-test-loop.installfile b/tests/fixtures/0264-inherit-test-loop.installfile new file mode 100644 index 0000000..510264a --- /dev/null +++ b/tests/fixtures/0264-inherit-test-loop.installfile @@ -0,0 +1,5 @@ +# Because of the fact we need to use relative paths, +# and because of the fact RSpec copies the first installfile to tmp/aruba, +# and because the first loop has to reference the second and vis versa, +# we need a 'stub' that kicks the loop off. +inherit ../../fixtures/0234-inherit-loop1.installfile diff --git a/tests/spec/simulator_spec.rb b/tests/spec/simulator_spec.rb index 6c2d095..8ccf98e 100644 --- a/tests/spec/simulator_spec.rb +++ b/tests/spec/simulator_spec.rb @@ -448,4 +448,11 @@ mtu 9001 expect(last_command_started.stdout).to include("cp /usr/share/user-manager/avatars/circles/Cat.png /target/var/lib/AccountsService/icons/awilfox") end end + context "simulating inheritance" do + it "overrides keys correctly when multiple values are specified" do + use_fixture '0238-inherit-override.installfile' + run_simulate + expect(last_command_started.stdout).to include("hostname overridden.hostname.local") + end + end end diff --git a/tests/spec/validator_spec.rb b/tests/spec/validator_spec.rb index 282d7ca..3a491a0 100644 --- a/tests/spec/validator_spec.rb +++ b/tests/spec/validator_spec.rb @@ -80,6 +80,35 @@ RSpec.describe 'HorizonScript validation', :type => :aruba do run_validate expect(last_command_started).to have_output(/error: .*length/) end + context "inheritance" do + it "supports basic single inheritance" do + use_fixture '0232-inherit-basic.installfile' + run_validate + expect(last_command_started).to have_output(PARSER_SUCCESS) + expect(last_command_started).to have_output(VALIDATOR_SUCCESS) + end + it "requires inherited files to exist" do + use_fixture '0233-inherit-missing.installfile' + run_validate + expect(last_command_started).to have_output(/error: .*non-existent/) + end + it "doesn't get stuck in a loop" do + use_fixture '0264-inherit-test-loop.installfile' + run_validate + expect(last_command_started).to have_output(/error: .*already inherited/) + end + it "supports relative paths" do + use_fixture '0236-inherit-relative.installfile' + run_validate + expect(last_command_started).to have_output(PARSER_SUCCESS) + expect(last_command_started).to have_output(VALIDATOR_SUCCESS) + end + it "still knows incomplete files are incomplete" do + use_fixture '0237-inherit-incomplete.installfile' + run_validate + expect(last_command_started).to have_output(/error: expected/) + end + end context "required keys" do # Runner.Validate.Required. # Runner.Validate.network. -- cgit v1.2.3-60-g2f50