Blame


1 138e225e 2025-06-04 xs # ISC License
2 138e225e 2025-06-04 xs #
3 138e225e 2025-06-04 xs # Copyright 2025 xs <xs@inda.re>
4 138e225e 2025-06-04 xs #
5 138e225e 2025-06-04 xs # Permission to use, copy, modify, and/or distribute this software for any
6 138e225e 2025-06-04 xs # purpose with or without fee is hereby granted, provided that the above
7 138e225e 2025-06-04 xs # copyright notice and this permission notice appear in all copies.
8 138e225e 2025-06-04 xs #
9 138e225e 2025-06-04 xs # THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
10 138e225e 2025-06-04 xs # REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
11 138e225e 2025-06-04 xs # FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
12 138e225e 2025-06-04 xs # INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
13 138e225e 2025-06-04 xs # LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
14 138e225e 2025-06-04 xs # OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
15 138e225e 2025-06-04 xs # PERFORMANCE OF THIS SOFTWARE.
16 46924c01 2025-05-28 xs .POSIX:
17 03d8f521 2025-05-27 xs PREFIX:=/usr/local
18 730e151b 2025-06-02 xs SHELLS=ksh93 ksh yash sh
19 da6cbc9d 2025-06-05 xs UTILITY_VERSION=0.1.3
20 46924c01 2025-05-28 xs UTILITY=$(PWD)/r7
21 58f9c509 2025-06-04 xs # To use the test suite, please edit or use environment for SSH parameters
22 58f9c509 2025-06-04 xs # SSH_ID=/path/to/.ssh/id_ed25519
23 58f9c509 2025-06-04 xs # SSH_TEST_NODES=nodeA nodeB
24 46924c01 2025-05-28 xs .DEFAULT: all
25 46924c01 2025-05-28 xs
26 46924c01 2025-05-28 xs all: tests
27 46924c01 2025-05-28 xs
28 688c9bfd 2025-06-03 xs release: r7.1
29 138e225e 2025-06-04 xs make tests
30 f976c0b3 2025-06-05 xs whoami
31 688c9bfd 2025-06-03 xs rm -fr _release/r7-$(UTILITY_VERSION)
32 688c9bfd 2025-06-03 xs mkdir -p _release/r7-$(UTILITY_VERSION)
33 8a9cbf90 2025-06-04 xs cp LICENSE r7 r7.1 Makefile README.md _release/r7-$(UTILITY_VERSION)
34 35f45d45 2025-06-04 xs cp -r groups/ _release/r7-$(UTILITY_VERSION)
35 688c9bfd 2025-06-03 xs cd _release && tar cfv r7-$(UTILITY_VERSION).tar r7-$(UTILITY_VERSION)
36 688c9bfd 2025-06-03 xs gzip -9 _release/r7-$(UTILITY_VERSION).tar
37 688c9bfd 2025-06-03 xs cp _release/r7-$(UTILITY_VERSION).tar.gz _release/r7-latest.tar.gz
38 688c9bfd 2025-06-03 xs
39 688c9bfd 2025-06-03 xs html: index.md documentation.html
40 861dd1d4 2025-05-31 xs pandoc --template=./r7doc.html \
41 688c9bfd 2025-06-03 xs -s --toc=false \
42 861dd1d4 2025-05-31 xs --metadata title='R7' \
43 861dd1d4 2025-05-31 xs --from markdown+smart \
44 861dd1d4 2025-05-31 xs -t html -o index.html index.md
45 861dd1d4 2025-05-31 xs
46 730e151b 2025-06-02 xs documentation.html: README.md ./r7
47 861dd1d4 2025-05-31 xs pandoc --template=./r7doc.html \
48 861dd1d4 2025-05-31 xs -s --toc=true \
49 861dd1d4 2025-05-31 xs --metadata title='R7 Documentation' \
50 138e225e 2025-06-04 xs --metadata date="Tue Jun 3 2025" \
51 861dd1d4 2025-05-31 xs --from markdown+smart \
52 861dd1d4 2025-05-31 xs -t html -o documentation.html README.md
53 861dd1d4 2025-05-31 xs
54 4b968d3f 2025-06-04 xs r7.1: README.md r7 Makefile
55 730e151b 2025-06-02 xs pandoc --from markdown+smart \
56 138e225e 2025-06-04 xs --metadata section=1 \
57 138e225e 2025-06-04 xs --metadata title="R7" \
58 138e225e 2025-06-04 xs --metadata header="User Manual" \
59 138e225e 2025-06-04 xs --metadata date="Tue Jun 3 2025" \
60 138e225e 2025-06-04 xs --metadata footer="v$(UTILITY_VERSION)" \
61 688c9bfd 2025-06-03 xs -s -t man -o r7.1 README.md
62 730e151b 2025-06-02 xs
63 730e151b 2025-06-02 xs r7.1.pdf: README.md
64 730e151b 2025-06-02 xs pandoc --from markdown+smart \
65 688c9bfd 2025-06-03 xs -s -t pdf -o r7.1.pdf README.md
66 730e151b 2025-06-02 xs
67 03d8f521 2025-05-27 xs install:
68 03d8f521 2025-05-27 xs cp ./r7 $(PREFIX)/bin/
69 03d8f521 2025-05-27 xs chmod 755 $(PREFIX)/bin/r7
70 688c9bfd 2025-06-03 xs cp ./r7.1 $(PREFIX)/man/man1/
71 688c9bfd 2025-06-03 xs chmod 644 $(PREFIX)/man/man1/r7.1
72 46924c01 2025-05-28 xs
73 46924c01 2025-05-28 xs # Test suite for r7
74 46924c01 2025-05-28 xs R=${SHELL} ${UTILITY}
75 46924c01 2025-05-28 xs test_arguments: usage version debug
76 46924c01 2025-05-28 xs test_workdirs: \
77 46924c01 2025-05-28 xs workdir0-arguments \
78 46924c01 2025-05-28 xs workdir0-digraph \
79 46924c01 2025-05-28 xs workdir1-init \
80 730e151b 2025-06-02 xs workdir1-populate \
81 730e151b 2025-06-02 xs workdir2-init \
82 730e151b 2025-06-02 xs workdir2-ssh \
83 730e151b 2025-06-02 xs workdir2-grouplib \
84 730e151b 2025-06-02 xs workdir2-goodby \
85 730e151b 2025-06-02 xs workdir2-r7doc \
86 730e151b 2025-06-02 xs workdir2-source \
87 730e151b 2025-06-02 xs workdir2-importer
88 46924c01 2025-05-28 xs
89 46924c01 2025-05-28 xs tests:
90 46924c01 2025-05-28 xs @echo
91 46924c01 2025-05-28 xs make test_arguments
92 46924c01 2025-05-28 xs make test_workdirs
93 46924c01 2025-05-28 xs @echo == ALL TESTS PASSED
94 46924c01 2025-05-28 xs
95 46924c01 2025-05-28 xs poly:
96 46924c01 2025-05-28 xs @for shell in ${SHELLS}; do \
97 46924c01 2025-05-28 xs ashell=$$(command -v $$shell || true); \
98 46924c01 2025-05-28 xs if test -x "$$ashell"; then \
99 35f45d45 2025-06-04 xs if time make tests SHELL=$$ashell SH=$$ashell; then \
100 46924c01 2025-05-28 xs : \
101 46924c01 2025-05-28 xs else \
102 46924c01 2025-05-28 xs failed="$$(basename "$$ashell") $$failed"; \
103 46924c01 2025-05-28 xs fi; \
104 46924c01 2025-05-28 xs else \
105 35f45d45 2025-06-04 xs notfound="$$shell $$notfound"; \
106 46924c01 2025-05-28 xs fi; \
107 46924c01 2025-05-28 xs done; \
108 46924c01 2025-05-28 xs echo; \
109 46924c01 2025-05-28 xs echo "== POLY TESTS RESULTS"; \
110 46924c01 2025-05-28 xs echo " spec: $(SHELLS)"; \
111 46924c01 2025-05-28 xs echo "not-found: $$notfound"; \
112 46924c01 2025-05-28 xs echo " failed: $$failed"; \
113 46924c01 2025-05-28 xs test -z "$$failed" -a -z "$$notfound" || (echo; false;)
114 46924c01 2025-05-28 xs
115 46924c01 2025-05-28 xs usage:
116 730e151b 2025-06-02 xs @echo _________________________________________________________
117 730e151b 2025-06-02 xs $R -h
118 46924c01 2025-05-28 xs $R -h 2>&1 | grep -q -e usage: -e '\['
119 730e151b 2025-06-02 xs @echo _________________________________________________________
120 46924c01 2025-05-28 xs
121 46924c01 2025-05-28 xs version:
122 730e151b 2025-06-02 xs @echo _________________________________________________________
123 46924c01 2025-05-28 xs $R -h 2>&1 | grep -q -e "$(UTILITY_VERSION)"
124 730e151b 2025-06-02 xs @echo _________________________________________________________
125 46924c01 2025-05-28 xs
126 46924c01 2025-05-28 xs debug:
127 730e151b 2025-06-02 xs @echo _________________________________________________________
128 46924c01 2025-05-28 xs $R -dn 2>&1 run-config | grep -q "R7 DEBUG $(UTILITY_VERSION)"
129 730e151b 2025-06-02 xs @echo _________________________________________________________
130 46924c01 2025-05-28 xs
131 46924c01 2025-05-28 xs workdir0-arguments:
132 730e151b 2025-06-02 xs @echo _________________________________________________________
133 46924c01 2025-05-28 xs rm -fr testdir/workdir0/_run
134 730e151b 2025-06-02 xs $R -w testdir/workdir0 -dn run-config 2>&1 | tee testdir/wd01.produced
135 730e151b 2025-06-02 xs grep -q -e '^LOADING $(PWD)/testdir/workdir0/site-config' testdir/wd01.produced
136 730e151b 2025-06-02 xs grep -q -e '^PROCESSING GROUP common' testdir/wd01.produced
137 730e151b 2025-06-02 xs grep -q -e '^PROCESSING GROUP test0' testdir/wd01.produced
138 730e151b 2025-06-02 xs @echo _________________________________________________________
139 46924c01 2025-05-28 xs
140 46924c01 2025-05-28 xs workdir0-digraph:
141 730e151b 2025-06-02 xs @echo _________________________________________________________
142 46924c01 2025-05-28 xs $R -w testdir/workdir0 -dn digraph-host 2>/dev/null | \
143 46924c01 2025-05-28 xs tee testdir/wd01.dot.produced
144 46924c01 2025-05-28 xs cmp testdir/wd01.dot testdir/wd01.dot.produced
145 730e151b 2025-06-02 xs @echo _________________________________________________________
146 46924c01 2025-05-28 xs
147 46924c01 2025-05-28 xs workdir1-init:
148 730e151b 2025-06-02 xs @echo _________________________________________________________
149 46924c01 2025-05-28 xs rm -fr testdir/workdir1
150 46924c01 2025-05-28 xs $R -dw testdir/workdir1 init
151 46924c01 2025-05-28 xs test -d testdir/workdir1
152 46924c01 2025-05-28 xs find testdir/workdir1 | tee testdir/wd1-init-find.produced
153 46924c01 2025-05-28 xs cmp testdir/wd1-init-find testdir/wd1-init-find.produced
154 730e151b 2025-06-02 xs @echo _________________________________________________________
155 46924c01 2025-05-28 xs
156 46924c01 2025-05-28 xs workdir1-populate: workdir1-init
157 730e151b 2025-06-02 xs @echo _________________________________________________________
158 730e151b 2025-06-02 xs { cd testdir/workdir1 && \
159 730e151b 2025-06-02 xs $R && \
160 46924c01 2025-05-28 xs $R run-config && \
161 46924c01 2025-05-28 xs $R output-dump && \
162 46924c01 2025-05-28 xs $R output && \
163 0e2a1ba1 2025-05-29 xs $R group && \
164 730e151b 2025-06-02 xs $R -s group ;} | wc -c | grep -q 0
165 730e151b 2025-06-02 xs @echo _________________________________________________________
166 730e151b 2025-06-02 xs
167 730e151b 2025-06-02 xs workdir2-init:
168 730e151b 2025-06-02 xs @echo _________________________________________________________
169 730e151b 2025-06-02 xs rm -fr testdir/workdir2
170 730e151b 2025-06-02 xs $R -dw testdir/workdir2 init
171 730e151b 2025-06-02 xs test -d testdir/workdir2
172 730e151b 2025-06-02 xs cd testdir/workdir2 && $R | wc -c | grep -q 0
173 730e151b 2025-06-02 xs cd testdir/workdir2 && \
174 730e151b 2025-06-02 xs cp "$(SSH_ID)" .ssh/id_ed25519_r7 && \
175 730e151b 2025-06-02 xs cp "$(SSH_ID).pub" .ssh/id_ed25519_r7.pub && \
176 730e151b 2025-06-02 xs . $(UTILITY) && for node in $(SSH_TEST_NODES); do \
177 730e151b 2025-06-02 xs mkdir "nodes/$$node" && \
178 730e151b 2025-06-02 xs ssh_accept_new "$$node"; \
179 730e151b 2025-06-02 xs done;
180 730e151b 2025-06-02 xs @echo _________________________________________________________
181 730e151b 2025-06-02 xs
182 730e151b 2025-06-02 xs workdir2-ssh: workdir2-init
183 730e151b 2025-06-02 xs @echo _________________________________________________________
184 730e151b 2025-06-02 xs cd testdir/workdir2 && . $(UTILITY) && \
185 730e151b 2025-06-02 xs cat site-config && \
186 730e151b 2025-06-02 xs echo 'state_hello() { echo Hi! ; }' > groups/common && \
187 730e151b 2025-06-02 xs echo 'state_hello() { echo Hey! ; }' > groups/heyo && \
188 730e151b 2025-06-02 xs echo 'dummy_hello() { echo Heyo! ; }' >> groups/heyo && \
189 730e151b 2025-06-02 xs echo 'group heyo $(SSH_TEST_NODES)' >> site-config && export R7_DEBUG=yes && \
190 730e151b 2025-06-02 xs digraph_host && \
191 730e151b 2025-06-02 xs run_config && \
192 730e151b 2025-06-02 xs output_dump && \
193 730e151b 2025-06-02 xs output | grep Hey! && \
194 730e151b 2025-06-02 xs output && \
195 730e151b 2025-06-02 xs info && \
196 730e151b 2025-06-02 xs digraph_ssh_id_hosts && \
197 730e151b 2025-06-02 xs ssh_known_hosts && \
198 730e151b 2025-06-02 xs nodes && \
199 730e151b 2025-06-02 xs prefix dummy && group heyo '.*' && output_dump && \
200 730e151b 2025-06-02 xs output | grep Heyo! && \
201 730e151b 2025-06-02 xs trace_id_last && \
202 730e151b 2025-06-02 xs output_duration | grep 0 && \
203 730e151b 2025-06-02 xs output_status && \
204 730e151b 2025-06-02 xs summary && \
205 730e151b 2025-06-02 xs output_errors && \
206 730e151b 2025-06-02 xs output_permissions && \
207 730e151b 2025-06-02 xs output_diffs
208 730e151b 2025-06-02 xs @echo _________________________________________________________
209 730e151b 2025-06-02 xs
210 730e151b 2025-06-02 xs workdir2-grouplib: workdir2-init
211 730e151b 2025-06-02 xs @echo _________________________________________________________
212 730e151b 2025-06-02 xs cp testdir/grouplib testdir/workdir2/groups/
213 730e151b 2025-06-02 xs mkdir -p testdir/workdir2/groups/grouplib.dir/subdir
214 730e151b 2025-06-02 xs touch testdir/workdir2/groups/grouplib.dir/item
215 730e151b 2025-06-02 xs echo 'aaa' > testdir/workdir2/groups/grouplib.dir/subdir/subitem
216 730e151b 2025-06-02 xs echo 'bbb' > testdir/workdir2/groups/grouplib.dir/subdir/subitem2
217 730e151b 2025-06-02 xs cp testdir/testfile2 testdir/workdir2/groups/grouplib.dir/
218 35f45d45 2025-06-04 xs cd testdir/workdir2 && set -e && . $(UTILITY) && \
219 730e151b 2025-06-02 xs echo 'prefix grouplib' > site-config && \
220 730e151b 2025-06-02 xs echo "group grouplib '.*'" >> site-config && \
221 f6bdfddc 2025-06-03 xs $R run-config && $R output-dump && $R info && \
222 730e151b 2025-06-02 xs for node in $(SSH_TEST_NODES); do \
223 730e151b 2025-06-02 xs ssh "$$node" ls -la /tmp/item\* | grep item; \
224 730e151b 2025-06-02 xs ssh "$$node" ls -la /tmp/r7/my-empty-file | grep empty | grep -e '-rw-r-----' ; \
225 730e151b 2025-06-02 xs ssh "$$node" ls -la /tmp/newdir/newdir2/null | grep -e '-rw-r-----' ; \
226 f6bdfddc 2025-06-03 xs done && $R output tools0 grouplib
227 730e151b 2025-06-02 xs @echo _________________________________________________________
228 730e151b 2025-06-02 xs
229 730e151b 2025-06-02 xs workdir2-goodby: workdir2-grouplib
230 730e151b 2025-06-02 xs @echo _________________________________________________________
231 730e151b 2025-06-02 xs cd testdir/workdir2 && \
232 730e151b 2025-06-02 xs rm -fr _output && \
233 730e151b 2025-06-02 xs $R -P grouplib -se group grouplib $(SSH_TEST_NODES)
234 730e151b 2025-06-02 xs @echo _________________________________________________________
235 730e151b 2025-06-02 xs
236 730e151b 2025-06-02 xs workdir2-r7doc: workdir2-init
237 730e151b 2025-06-02 xs @echo _________________________________________________________
238 730e151b 2025-06-02 xs rm -fr testdir/workdir2/_output
239 730e151b 2025-06-02 xs cp testdir/example1 testdir/workdir2/groups/
240 730e151b 2025-06-02 xs cd testdir/workdir2/ && $R -a group example1 $(SSH_TEST_NODES)
241 730e151b 2025-06-02 xs cd testdir/workdir2/ && $R -ea group example1 $(SSH_TEST_NODES)
242 730e151b 2025-06-02 xs rm -fr testdir/workdir2/_output
243 730e151b 2025-06-02 xs cp testdir/example2 testdir/workdir2/groups/
244 730e151b 2025-06-02 xs cd testdir/workdir2/ && $R -sea group example2 $(SSH_TEST_NODES)
245 730e151b 2025-06-02 xs @echo _________________________________________________________
246 730e151b 2025-06-02 xs
247 730e151b 2025-06-02 xs workdir2-source: workdir2-init
248 730e151b 2025-06-02 xs @echo _________________________________________________________
249 730e151b 2025-06-02 xs rm -fr testdir/workdir2/_output
250 730e151b 2025-06-02 xs rm -fr testdir/workdir2/_run
251 730e151b 2025-06-02 xs cp testdir/source testdir/workdir2/groups/
252 730e151b 2025-06-02 xs mkdir testdir/workdir2/groups/source.dir
253 730e151b 2025-06-02 xs echo : > testdir/workdir2/groups/source.dir/my-source
254 730e151b 2025-06-02 xs for node in $(SSH_TEST_NODES); do \
255 730e151b 2025-06-02 xs echo myvar=3333 > "testdir/workdir2/nodes/$$node/my-source" ; \
256 730e151b 2025-06-02 xs done
257 730e151b 2025-06-02 xs cd testdir/workdir2/ && $R -sea group source $(SSH_TEST_NODES)
258 730e151b 2025-06-02 xs sleep 1
259 730e151b 2025-06-02 xs cd testdir/workdir2/ && $R -sda group source $(SSH_TEST_NODES)
260 730e151b 2025-06-02 xs cd testdir/workdir2/ && $R output \* source source_nodesource2 | grep 3333
261 730e151b 2025-06-02 xs @echo _________________________________________________________
262 730e151b 2025-06-02 xs
263 730e151b 2025-06-02 xs workdir2-importer: workdir2-init
264 730e151b 2025-06-02 xs @echo _________________________________________________________
265 730e151b 2025-06-02 xs rm -fr testdir/workdir2/_output
266 730e151b 2025-06-02 xs rm -fr testdir/workdir2/_run
267 730e151b 2025-06-02 xs cd testdir/workdir2/ && \
268 730e151b 2025-06-02 xs for node in $(SSH_TEST_NODES); do \
269 730e151b 2025-06-02 xs . $(UTILITY) && import "$$node"; \
270 730e151b 2025-06-02 xs done
271 730e151b 2025-06-02 xs find testdir/workdir2/nodes | grep sshd_config
272 730e151b 2025-06-02 xs find testdir/workdir2/nodes
273 8a9cbf90 2025-06-04 xs cd testdir/workdir2/ && . $(UTILITY) && import notfound || :
274 730e151b 2025-06-02 xs @echo _________________________________________________________