Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Unit test input files are verified during make verify-units-inputs #1909

Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@
*.ssexwsp.user
*.TMP
*.tmp
# Makefile empty target files of verify-units-inputs target
Units/**/.input.*.verified
*~
.deps
.dirstamp
Expand Down
7 changes: 4 additions & 3 deletions Units/parser-puppetManifest.r/node.d/expected.tags
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
www1.example.com input.pp /^node 'www1.example.com' {$/;" node line:2 language:PuppetManifest
www2.example.com input.pp /^node 'www2.example.com', 'www3.example.com' {$/;" node line:12 language:PuppetManifest
www3.example.com input.pp /^node 'www2.example.com', 'www3.example.com' {$/;" node line:12 language:PuppetManifest
default input.pp /^node 'default' {}$/;" node line:2 language:PuppetManifest
www1.example.com input.pp /^node 'www1.example.com' {$/;" node line:3 language:PuppetManifest
www2.example.com input.pp /^node 'www2.example.com', 'www3.example.com' {$/;" node line:13 language:PuppetManifest
www3.example.com input.pp /^node 'www2.example.com', 'www3.example.com' {$/;" node line:13 language:PuppetManifest
1 change: 1 addition & 0 deletions Units/parser-puppetManifest.r/node.d/input.pp
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
/* Taken from https://docs.puppet.com/puppet/5.1/lang_node_definitions.html */
node 'default' {}
node 'www1.example.com' {
include common
include apache
Expand Down
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
var input.pp /^$var=['\/tmp\/file1','\/tmp\/file2']$/;" variable line:1 language:PuppetManifest
arraytest input.pp /^class arraytest {$/;" class line:3 language:PuppetManifest end:9
var input.pp /^ $var = $var + ['\/tmp\/file3', '\/tmp\/file4']$/;" variable line:4 language:PuppetManifest scope:class:arraytest
2 changes: 1 addition & 1 deletion Units/parser-puppetManifest.r/puppet-append.d/input.pp
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
$var=['/tmp/file1','/tmp/file2']

class arraytest {
$var += ['/tmp/file3', '/tmp/file4']
$var = $var + ['/tmp/file3', '/tmp/file4']
file {
$var:
content => "test"
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
test input.pp /^define test($name) {$/;" definition line:1 language:PuppetManifest end:6
/tmp/collection_within_virtual_definitions1_$name.txt input.pp /^ file {"\/tmp\/collection_within_virtual_definitions1_$name.txt":$/;" resource line:2 language:PuppetManifest scope:definition:test end:4
test input.pp /^define test($my_name) {$/;" definition line:1 language:PuppetManifest end:6
/tmp/collection_within_virtual_definitions1_$my_name.txt input.pp /^ file {"\/tmp\/collection_within_virtual_definitions1_$my_name.txt":$/;" resource line:2 language:PuppetManifest scope:definition:test end:4
test2 input.pp /^define test2() {$/;" definition line:8 language:PuppetManifest end:12
/tmp/collection_within_virtual_definitions2_$name.txt input.pp /^ file {"\/tmp\/collection_within_virtual_definitions2_$name.txt":$/;" resource line:9 language:PuppetManifest scope:definition:test2 end:11
foo input.pp /^ @test {"foo":$/;" resource line:15 language:PuppetManifest end:17
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
define test($name) {
file {"/tmp/collection_within_virtual_definitions1_$name.txt":
content => "File name $name\n"
define test($my_name) {
file {"/tmp/collection_within_virtual_definitions1_$my_name.txt":
content => "File name $my_name\n"
}
Test2 <||>
}
Expand All @@ -13,7 +13,7 @@

node default {
@test {"foo":
name => "foo"
my_name => "foo"
}
@test2 {"foo2": }
Test <||>
Expand Down
2 changes: 2 additions & 0 deletions Units/parser-puppetManifest.r/puppet-emptyif.d/args.ctags
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
--sort=no
--fields=+KZlne
Empty file.
4 changes: 4 additions & 0 deletions Units/parser-puppetManifest.r/puppet-emptyif.d/input.pp
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@

if true {
# still nothing
}
3 changes: 0 additions & 3 deletions Units/parser-puppetManifest.r/puppet-emptyifelse.d/input.pp
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,3 @@
# nothing here
}

if true {
# still nothing
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
one input.pp /^class one {$/;" class line:1 language:PuppetManifest end:3
/tmp/multipleclassone input.pp /^ file { "\/tmp\/multipleclassone": content => "one" }$/;" resource line:2 language:PuppetManifest scope:class:one end:2
one input.pp /^class one {$/;" class line:5 language:PuppetManifest end:7
/tmp/multipleclasstwo input.pp /^ file { "\/tmp\/multipleclasstwo": content => "two" }$/;" resource line:6 language:PuppetManifest scope:class:one end:6
two input.pp /^class two {$/;" class line:5 language:PuppetManifest end:7
/tmp/multipleclasstwo input.pp /^ file { "\/tmp\/multipleclasstwo": content => "two" }$/;" resource line:6 language:PuppetManifest scope:class:two end:6
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
file { "/tmp/multipleclassone": content => "one" }
}

class one {
class two {
file { "/tmp/multipleclasstwo": content => "two" }
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
mode input.pp /^$mode = 640$/;" variable line:2 language:PuppetManifest
mode input.pp /^$mode = "640"$/;" variable line:2 language:PuppetManifest
thing input.pp /^define thing {$/;" definition line:4 language:PuppetManifest end:6
/tmp/$name input.pp /^ file { "\/tmp\/$name": ensure => file, mode => $mode }$/;" resource line:5 language:PuppetManifest scope:definition:thing end:5
testing input.pp /^class testing {$/;" class line:8 language:PuppetManifest end:11
mode input.pp /^ $mode = 755$/;" variable line:9 language:PuppetManifest scope:class:testing
mode input.pp /^ $mode = "755"$/;" variable line:9 language:PuppetManifest scope:class:testing
4 changes: 2 additions & 2 deletions Units/parser-puppetManifest.r/puppet-scopetest.d/input.pp
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@

$mode = 640
$mode = "640"

define thing {
file { "/tmp/$name": ensure => file, mode => $mode }
}

class testing {
$mode = 755
$mode = "755"
thing {scopetest: }
}

Expand Down
26 changes: 13 additions & 13 deletions Units/parser-puppetManifest.r/puppet-selectorvalues.d/input.pp
Original file line number Diff line number Diff line change
Expand Up @@ -6,37 +6,37 @@
$test = "yay"

$mode1 = $value1 ? {
"" => 755,
default => 644
"" => "755",
default => "644"
}

$mode2 = $value2 ? {
true => 755,
default => 644
true => "755",
default => "644"
}

$mode3 = $value3 ? {
false => 755,
default => 644
false => "755",
default => "644"
}

$mode4 = $value4 ? {
$test => 755,
default => 644
$test => "755",
default => "644"
}

$mode5 = yay ? {
$test => 755,
default => 644
$test => "755",
default => "644"
}

$mode6 = $mode5 ? {
755 => 755
"755" => "755"
}

$mode7 = "test regex" ? {
/regex$/ => 755,
default => 644
/regex$/ => "755",
default => "644"
}


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@ var input.pp /^$var = "value"$/;" variable line:3 language:PuppetManifest
/tmp/snippetselectbtest input.pp /^file { "\/tmp\/snippetselectbtest":$/;" resource line:13 language:PuppetManifest end:19
othervar input.pp /^$othervar = "complex value"$/;" variable line:21 language:PuppetManifest
/tmp/snippetselectctest input.pp /^file { "\/tmp\/snippetselectctest":$/;" resource line:23 language:PuppetManifest end:29
anothervar input.pp /^$anothervar = Yayness$/;" variable line:30 language:PuppetManifest
anothervar input.pp /^$anothervar = "Yayness"$/;" variable line:30 language:PuppetManifest
/tmp/snippetselectdtest input.pp /^file { "\/tmp\/snippetselectdtest":$/;" resource line:32 language:PuppetManifest end:38
18 changes: 9 additions & 9 deletions Units/parser-puppetManifest.r/puppet-simpleselector.d/input.pp
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,16 @@
file { "/tmp/snippetselectatest":
ensure => file,
mode => $var ? {
nottrue => 641,
value => 755
nottrue => "641",
value => "755"
}
}

file { "/tmp/snippetselectbtest":
ensure => file,
mode => $var ? {
nottrue => 644,
default => 755
nottrue => "644",
default => "755"
}
}

Expand All @@ -23,16 +23,16 @@
file { "/tmp/snippetselectctest":
ensure => file,
mode => $othervar ? {
"complex value" => 755,
default => 644
"complex value" => "755",
default => "644"
}
}
$anothervar = Yayness
$anothervar = "Yayness"

file { "/tmp/snippetselectdtest":
ensure => file,
mode => $anothervar ? {
Yayness => 755,
default => 644
"Yayness" => "755",
default => "644"
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,15 +6,15 @@
$test = "yay"

$mode1 = $value1 ? {
"" => 755
"" => "755"
}

$mode2 = $value2 ? {
true => 755
true => "755"
}

$mode3 = $value3 ? {
default => 755
default => "755"
}

file { "/tmp/singleselector1": ensure => file, mode => $mode1 }
Expand Down
3 changes: 2 additions & 1 deletion Units/parser-puppetManifest.r/unless.d/expected.tags
Original file line number Diff line number Diff line change
@@ -1 +1,2 @@
/tmp/x input.pp /^ file { "\/tmp\/x": }$/;" resource line:2 language:PuppetManifest end:2
array input.pp /^$array = [ 3, 5, 7 ]$/;" variable line:1 language:PuppetManifest
/tmp/x input.pp /^ file { "\/tmp\/x": }$/;" resource line:3 language:PuppetManifest end:3
1 change: 1 addition & 0 deletions Units/parser-puppetManifest.r/unless.d/input.pp
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
$array = [ 3, 5, 7 ]
unless $array[0] > 5 {
file { "/tmp/x": }
}
10 changes: 7 additions & 3 deletions circle.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,10 +35,14 @@ jobs:
yum -y install git || :
- checkout
- run:
name: Install build tools
name: Install build and test tools
# TODO: enable spell checker
command: |
yum -y install gcc automake autoconf pkgconfig make libxml2-devel jansson-devel libyaml-devel findutils || :
rpm -Uvh https://yum.puppet.com/puppet5/puppet5-release-el-7.noarch.rpm \
&& yum -y install epel-release \
&& yum -y install gcc automake autoconf pkgconfig make \
libxml2-devel jansson-devel libyaml-devel findutils \
puppet-agent-5.5.6-1.el7 jq || :
- run:
name: Build
command: |
Expand All @@ -48,7 +52,7 @@ jobs:
- run:
name: Test
command: |
make check roundtrip CIRCLECI=1
make verify-units-inputs check roundtrip CIRCLECI=1 PATH=/opt/puppetlabs/bin:$PATH

workflows:
version: 2
Expand Down
1 change: 1 addition & 0 deletions configure.ac
Original file line number Diff line number Diff line change
Expand Up @@ -204,6 +204,7 @@ AC_ARG_PROGRAM
AM_CONDITIONAL(INSTALL_LIB, [test "x$enable_readlib" = "xyes"])
AM_CONDITIONAL(INSTALL_ETAGS, [test "x$enable_etags" = "xyes"])
AM_CONDITIONAL(USE_READCMD, [test "x$enable_readcmd" = "xyes"])
AM_CONDITIONAL(USING_BMAKE, [test "x$MAKE" = "xbmake"])

dnl AC_MSG_NOTICE(Change with $program_transform_name)
CTAGS_NAME_EXECUTABLE=`echo ctags | sed "$program_transform_name"`
Expand Down
56 changes: 54 additions & 2 deletions makefiles/testing.mak
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
# -*- makefile -*-
.PHONY: check units fuzz noise tmain tinst clean-units clean-tmain clean-gcov run-gcov codecheck cppcheck dicts cspell
.PHONY: check units fuzz noise tmain tinst clean-units clean-tmain clean-gcov run-gcov codecheck cppcheck dicts cspell verify-units-inputs clean-verify-units-inputs

check: tmain units

clean-local: clean-units clean-tmain
clean-local: clean-units clean-tmain clean-verify-units-inputs

CTAGS_TEST = ./ctags$(EXEEXT)
READ_TEST = ./readtags$(EXEEXT)
Expand Down Expand Up @@ -88,6 +88,58 @@ slap: $(CTAGS_TEST)
--with-timeout=$(TIMEOUT)"; \
$(SHELL) $${c} $(srcdir)/Units

TEST_DIRS =

# bmake does not support the metaprogramming similar to gnu make.
if !USING_BMAKE

# TODO: A workaround for automake errorrs.
# TODO: Explain more why this is necessary
set = $(eval $(1) = $(2))

# Parameters:
# $(1): Language Name. For example: PUPPET
# $(2): Extension. For example: .pp
# $(3): Directory Name. For example: parser-puppetManifest.r
# $(4): Command: For example: puppet apply --noop $$$$< 1>/dev/null
define VERIFY_GIVEN_UNITS_TEST_DIR

# Find the test directories where ctags is expected to succeed. Only tests with
# an expected.tags file present are required to have valid input.
$$(call set,$(1)_TEST_DIRS,$$(foreach path, \
$$(shell find $$(srcdir)/Units/$(3) -name expected.tags), \
$$(shell dirname $$(path))) )
$$(call set,VERIFY_$(1)_TEST_DIRS_TARGETS,$$($(1)_TEST_DIRS:%=%/.input$(2).verified))

# Add the dependency to the verify-units-inputs phony target for the current language.
verify-units-inputs: $$(VERIFY_$(1)_TEST_DIRS_TARGETS)

# A inner define to verify each file of the specified language.
define VERIFY_ONE_$(1)_TEST_DIR
$$(1)/.input$(2).verified: $$(1)/input$(2)
$(4) && \
touch $$$$@
endef

# Generate the inner define
$$(foreach $(1)_test_dir,$$($(1)_TEST_DIRS),$$(eval $$(call VERIFY_ONE_$(1)_TEST_DIR,$$($(1)_test_dir))))

endef # define VERIFY_GIVEN_UNITS_TEST_DIR

# Generate unit test input.xx file verifiers for each language.
$(eval $(call VERIFY_GIVEN_UNITS_TEST_DIR,PUPPET,.pp,parser-puppetManifest.r,puppet apply --noop $$$$< 1>/dev/null))
$(eval $(call VERIFY_GIVEN_UNITS_TEST_DIR,JSON,.json,simple-json.d,jq '.' $$$$< 1>/dev/null))


#
# Removes the empty target files of the verify-units-inputs target
#
clean-verify-units-inputs:
find Units -path "*/.input.*.verified" | xargs rm -f


endif # if !USING_BMAKE

#
# UNITS Target
#
Expand Down