diff options
author | Jordan Bracco <href@random.sh> | 2022-03-25 15:44:44 +0000 |
---|---|---|
committer | Jordan Bracco <href@random.sh> | 2022-03-25 15:44:44 +0000 |
commit | babd144393c0cbfdc28fb475190d9a552070b240 (patch) | |
tree | 927edd0818be95134ece7b819311b0269b3c5fdc /commands | |
parent | Initial PoC (diff) |
Diffstat (limited to 'commands')
-rw-r--r-- | commands/freebsd/_freebsd.sh | 21 | ||||
-rwxr-xr-x | commands/freebsd/ifconfig/list-interfaces-names (renamed from commands/ifconfig/interfaces-names) | 0 | ||||
-rwxr-xr-x | commands/freebsd/jails/list (renamed from commands/jails/list) | 0 | ||||
-rw-r--r-- | commands/freebsd/netgraph/.mock.ngctl.list.l.txt | 380 | ||||
-rw-r--r-- | commands/freebsd/netgraph/_netgraph.sh | 7 | ||||
-rwxr-xr-x | commands/freebsd/netgraph/list-nodes | 111 |
6 files changed, 519 insertions, 0 deletions
diff --git a/commands/freebsd/_freebsd.sh b/commands/freebsd/_freebsd.sh new file mode 100644 index 0000000..76871f7 --- /dev/null +++ b/commands/freebsd/_freebsd.sh @@ -0,0 +1,21 @@ +#!/bin/sh + +freebsd() { + if [ ! "$(os_get "id")" = "freebsd" ]; then exit 1; fi +} + +freebsd_ensure() { + _os_type=os_get "id" + if [ ! "${_os_type}" = "freebsd" ]; then + _execution_error error=unsupported_operating_system expected_os_type="freebsd" os_type="${_os_type}" + fi +} + +freebsd_ensure_kernel_module_loaded() { + _kmod="${1}" + if [ -z "${_kmod}" ]; then _execution_error function=freebsd_ensure_kernel_module_loaded error=missing_argument arg=kmod; fi + if ! kldstat -q -m "${_kmod}" > /dev/null 2>&1; then + _execution_error error=missing_dependency dependency=kernel_module kernel_module="${_kmod}" + fi +} + diff --git a/commands/ifconfig/interfaces-names b/commands/freebsd/ifconfig/list-interfaces-names index f058404..f058404 100755 --- a/commands/ifconfig/interfaces-names +++ b/commands/freebsd/ifconfig/list-interfaces-names diff --git a/commands/jails/list b/commands/freebsd/jails/list index b7e009e..b7e009e 100755 --- a/commands/jails/list +++ b/commands/freebsd/jails/list diff --git a/commands/freebsd/netgraph/.mock.ngctl.list.l.txt b/commands/freebsd/netgraph/.mock.ngctl.list.l.txt new file mode 100644 index 0000000..90a8957 --- /dev/null +++ b/commands/freebsd/netgraph/.mock.ngctl.list.l.txt @@ -0,0 +1,380 @@ +There are 66 total nodes: + Name: pub Type: ether ID: 00000001 Num hooks: 2 + Local hook Peer name Peer type Peer ID Peer hook + ---------- --------- --------- ------- --------- + upper pubbridge bridge 00000038 link1 + lower pubbridge bridge 00000038 link0 + + Name: igb1 Type: ether ID: 00000002 Num hooks: 0 + + Name: ng0_beautte Type: eiface ID: 00000202 Num hooks: 1 + Local hook Peer name Peer type Peer ID Peer hook + ---------- --------- --------- ------- --------- + ether localbridge bridge 0000000a link2 + + Name: tinc Type: ether ID: 00000003 Num hooks: 2 + Local hook Peer name Peer type Peer ID Peer hook + ---------- --------- --------- ------- --------- + upper tincbridge bridge 0000002b link1 + lower tincbridge bridge 0000002b link0 + + Name: local Type: eiface ID: 00000006 Num hooks: 1 + Local hook Peer name Peer type Peer ID Peer hook + ---------- --------- --------- ------- --------- + ether localbridge bridge 0000000a link0 + + Name: ng1_front Type: eiface ID: 00000107 Num hooks: 1 + Local hook Peer name Peer type Peer ID Peer hook + ---------- --------- --------- ------- --------- + ether tincbridge bridge 0000002b link9 + + Name: ng0_opa Type: eiface ID: 00000407 Num hooks: 1 + Local hook Peer name Peer type Peer ID Peer hook + ---------- --------- --------- ------- --------- + ether localbridge bridge 0000000a link23 + + Name: localbridge Type: bridge ID: 0000000a Num hooks: 25 + Local hook Peer name Peer type Peer ID Peer hook + ---------- --------- --------- ------- --------- + link25 ng0_barrel eiface 0000047f ether + link24 ng0_portsdev eiface 00000442 ether + link23 ng0_opa eiface 00000407 ether + link22 ng0_kraui eiface 000003ce ether + link21 ngeth48 eiface 000003b1 ether + link20 ng0_kratos_admi eiface 0000037b ether + link19 ng0_enki_test2 eiface 00000347 ether + link18 ng0_enki_test1 eiface 00000315 ether + link17 ng0_grafana eiface 000002e5 ether + link16 ng0_ca eiface 000002b7 ether + link15 ng0_deterior eiface 000002a0 ether + link14 ng0_vpn_as43069 eiface 0000026a ether + link2 ng0_beautte eiface 00000202 ether + link13 ng0_mgmt eiface 000001a0 ether + link12 ng0_sade eiface 0000016c ether + link11 ng0_loki eiface 00000147 ether + link10 ng0_sso eiface 00000124 ether + link9 ng0_front eiface 000000f7 ether + link8 ng0_net eiface 000000c1 ether + link7 ng0_matrix eiface 000000a5 ether + link6 ng0_git eiface 0000008b ether + link5 ng0_vpn eiface 00000068 ether + link4 ng0_piss eiface 00000048 ether + link3 ng0_bender eiface 00000023 ether + link0 local eiface 00000006 ether + + Name: as43069 Type: eiface ID: 0000000d Num hooks: 1 + Local hook Peer name Peer type Peer ID Peer hook + ---------- --------- --------- ------- --------- + ether as43069bridge bridge 00000011 link0 + + Name: as43069bridge Type: bridge ID: 00000011 Num hooks: 4 + Local hook Peer name Peer type Peer ID Peer hook + ---------- --------- --------- ------- --------- + link4 ng2_vpn_as43069 eiface 0000028a ether + link3 ng2_beautte eiface 0000021b ether + link2 ng2_net eiface 000000d8 ether + link0 as43069 eiface 0000000d ether + + Name: ng1_beautte Type: eiface ID: 00000211 Num hooks: 1 + Local hook Peer name Peer type Peer ID Peer hook + ---------- --------- --------- ------- --------- + ether tincbridge bridge 0000002b link8 + + Name: ng2_front Type: eiface ID: 00000113 Num hooks: 1 + Local hook Peer name Peer type Peer ID Peer hook + ---------- --------- --------- ------- --------- + ether pubbridge bridge 00000038 link5 + + Name: ng0_enki_test1 Type: eiface ID: 00000315 Num hooks: 1 + Local hook Peer name Peer type Peer ID Peer hook + ---------- --------- --------- ------- --------- + ether localbridge bridge 0000000a link18 + + Name: ng2_beautte Type: eiface ID: 0000021b Num hooks: 1 + Local hook Peer name Peer type Peer ID Peer hook + ---------- --------- --------- ------- --------- + ether as43069bridge bridge 00000011 link3 + + Name: ng0_bender Type: eiface ID: 00000023 Num hooks: 1 + Local hook Peer name Peer type Peer ID Peer hook + ---------- --------- --------- ------- --------- + ether localbridge bridge 0000000a link3 + + Name: ng1_opa Type: eiface ID: 00000423 Num hooks: 1 + Local hook Peer name Peer type Peer ID Peer hook + ---------- --------- --------- ------- --------- + ether tincbridge bridge 0000002b link21 + + Name: ng0_sso Type: eiface ID: 00000124 Num hooks: 1 + Local hook Peer name Peer type Peer ID Peer hook + ---------- --------- --------- ------- --------- + ether localbridge bridge 0000000a link10 + + Name: tincbridge Type: bridge ID: 0000002b Num hooks: 24 + Local hook Peer name Peer type Peer ID Peer hook + ---------- --------- --------- ------- --------- + link23 ng1_barrel eiface 0000049d ether + link22 ng1_portsdev eiface 0000045f ether + link21 ng1_opa eiface 00000423 ether + link20 ng1_kraui eiface 000003e9 ether + link19 ng1_kratos_admi eiface 00000395 ether + link18 ng1_enki_test2 eiface 00000360 ether + link17 ng1_enki_test1 eiface 0000032d ether + link16 ng1_grafana eiface 000002fc ether + link15 ng1_ca eiface 000002cd ether + link14 ng1_vpn_as43069 eiface 0000027f ether + link8 ng1_beautte eiface 00000211 ether + link13 ng1_mgmt eiface 000001b4 ether + link12 ng1_sade eiface 0000017f ether + link11 ng1_loki eiface 00000159 ether + link10 ng1_sso eiface 00000135 ether + link9 ng1_front eiface 00000107 ether + link7 ng1_net eiface 000000cf ether + link6 ng1_matrix eiface 000000b2 ether + link5 ng1_git eiface 00000097 ether + link4 ng1_vpn eiface 00000073 ether + link3 ng1_piss eiface 00000052 ether + link2 ng1_bender eiface 00000030 ether + link1 tinc ether 00000003 upper + link0 tinc ether 00000003 lower + + Name: ng1_enki_test1 Type: eiface ID: 0000032d Num hooks: 1 + Local hook Peer name Peer type Peer ID Peer hook + ---------- --------- --------- ------- --------- + ether tincbridge bridge 0000002b link17 + + Name: ng1_bender Type: eiface ID: 00000030 Num hooks: 1 + Local hook Peer name Peer type Peer ID Peer hook + ---------- --------- --------- ------- --------- + ether tincbridge bridge 0000002b link2 + + Name: ng1_sso Type: eiface ID: 00000135 Num hooks: 1 + Local hook Peer name Peer type Peer ID Peer hook + ---------- --------- --------- ------- --------- + ether tincbridge bridge 0000002b link10 + + Name: pubbridge Type: bridge ID: 00000038 Num hooks: 8 + Local hook Peer name Peer type Peer ID Peer hook + ---------- --------- --------- ------- --------- + link7 ng2_mgmt eiface 000001c2 ether + link6 ng2_sade eiface 0000018c ether + link5 ng2_front eiface 00000113 ether + link4 ng2_vpn eiface 0000007e ether + link3 ng2_piss eiface 0000005c ether + link2 ng2_bender eiface 0000003d ether + link1 pub ether 00000001 upper + link0 pub ether 00000001 lower + + Name: ng2_bender Type: eiface ID: 0000003d Num hooks: 1 + Local hook Peer name Peer type Peer ID Peer hook + ---------- --------- --------- ------- --------- + ether pubbridge bridge 00000038 link2 + + Name: ng0_portsdev Type: eiface ID: 00000442 Num hooks: 1 + Local hook Peer name Peer type Peer ID Peer hook + ---------- --------- --------- ------- --------- + ether localbridge bridge 0000000a link24 + + Name: ng0_loki Type: eiface ID: 00000147 Num hooks: 1 + Local hook Peer name Peer type Peer ID Peer hook + ---------- --------- --------- ------- --------- + ether localbridge bridge 0000000a link11 + + Name: ng0_enki_test2 Type: eiface ID: 00000347 Num hooks: 1 + Local hook Peer name Peer type Peer ID Peer hook + ---------- --------- --------- ------- --------- + ether localbridge bridge 0000000a link19 + + Name: ng0_piss Type: eiface ID: 00000048 Num hooks: 1 + Local hook Peer name Peer type Peer ID Peer hook + ---------- --------- --------- ------- --------- + ether localbridge bridge 0000000a link4 + + Name: ng1_piss Type: eiface ID: 00000052 Num hooks: 1 + Local hook Peer name Peer type Peer ID Peer hook + ---------- --------- --------- ------- --------- + ether tincbridge bridge 0000002b link3 + + Name: ng1_loki Type: eiface ID: 00000159 Num hooks: 1 + Local hook Peer name Peer type Peer ID Peer hook + ---------- --------- --------- ------- --------- + ether tincbridge bridge 0000002b link11 + + Name: ng2_piss Type: eiface ID: 0000005c Num hooks: 1 + Local hook Peer name Peer type Peer ID Peer hook + ---------- --------- --------- ------- --------- + ether pubbridge bridge 00000038 link3 + + Name: ng1_portsdev Type: eiface ID: 0000045f Num hooks: 1 + Local hook Peer name Peer type Peer ID Peer hook + ---------- --------- --------- ------- --------- + ether tincbridge bridge 0000002b link22 + + Name: ng1_enki_test2 Type: eiface ID: 00000360 Num hooks: 1 + Local hook Peer name Peer type Peer ID Peer hook + ---------- --------- --------- ------- --------- + ether tincbridge bridge 0000002b link18 + + Name: ng0_vpn Type: eiface ID: 00000068 Num hooks: 1 + Local hook Peer name Peer type Peer ID Peer hook + ---------- --------- --------- ------- --------- + ether localbridge bridge 0000000a link5 + + Name: ng0_vpn_as43069 Type: eiface ID: 0000026a Num hooks: 1 + Local hook Peer name Peer type Peer ID Peer hook + ---------- --------- --------- ------- --------- + ether localbridge bridge 0000000a link14 + + Name: ng0_sade Type: eiface ID: 0000016c Num hooks: 1 + Local hook Peer name Peer type Peer ID Peer hook + ---------- --------- --------- ------- --------- + ether localbridge bridge 0000000a link12 + + Name: ng1_vpn Type: eiface ID: 00000073 Num hooks: 1 + Local hook Peer name Peer type Peer ID Peer hook + ---------- --------- --------- ------- --------- + ether tincbridge bridge 0000002b link4 + + Name: ng0_kratos_admi Type: eiface ID: 0000037b Num hooks: 1 + Local hook Peer name Peer type Peer ID Peer hook + ---------- --------- --------- ------- --------- + ether localbridge bridge 0000000a link20 + + Name: ng2_vpn Type: eiface ID: 0000007e Num hooks: 1 + Local hook Peer name Peer type Peer ID Peer hook + ---------- --------- --------- ------- --------- + ether pubbridge bridge 00000038 link4 + + Name: ng0_barrel Type: eiface ID: 0000047f Num hooks: 1 + Local hook Peer name Peer type Peer ID Peer hook + ---------- --------- --------- ------- --------- + ether localbridge bridge 0000000a link25 + + Name: ng1_sade Type: eiface ID: 0000017f Num hooks: 1 + Local hook Peer name Peer type Peer ID Peer hook + ---------- --------- --------- ------- --------- + ether tincbridge bridge 0000002b link12 + + Name: ng1_vpn_as43069 Type: eiface ID: 0000027f Num hooks: 1 + Local hook Peer name Peer type Peer ID Peer hook + ---------- --------- --------- ------- --------- + ether tincbridge bridge 0000002b link14 + + Name: ng2_vpn_as43069 Type: eiface ID: 0000028a Num hooks: 1 + Local hook Peer name Peer type Peer ID Peer hook + ---------- --------- --------- ------- --------- + ether as43069bridge bridge 00000011 link4 + + Name: ng0_git Type: eiface ID: 0000008b Num hooks: 1 + Local hook Peer name Peer type Peer ID Peer hook + ---------- --------- --------- ------- --------- + ether localbridge bridge 0000000a link6 + + Name: ng2_sade Type: eiface ID: 0000018c Num hooks: 1 + Local hook Peer name Peer type Peer ID Peer hook + ---------- --------- --------- ------- --------- + ether pubbridge bridge 00000038 link6 + + Name: ng1_kratos_admi Type: eiface ID: 00000395 Num hooks: 1 + Local hook Peer name Peer type Peer ID Peer hook + ---------- --------- --------- ------- --------- + ether tincbridge bridge 0000002b link19 + + Name: ng1_git Type: eiface ID: 00000097 Num hooks: 1 + Local hook Peer name Peer type Peer ID Peer hook + ---------- --------- --------- ------- --------- + ether tincbridge bridge 0000002b link5 + + Name: ng1_barrel Type: eiface ID: 0000049d Num hooks: 1 + Local hook Peer name Peer type Peer ID Peer hook + ---------- --------- --------- ------- --------- + ether tincbridge bridge 0000002b link23 + + Name: ng0_mgmt Type: eiface ID: 000001a0 Num hooks: 1 + Local hook Peer name Peer type Peer ID Peer hook + ---------- --------- --------- ------- --------- + ether localbridge bridge 0000000a link13 + + Name: ng0_deterior Type: eiface ID: 000002a0 Num hooks: 1 + Local hook Peer name Peer type Peer ID Peer hook + ---------- --------- --------- ------- --------- + ether localbridge bridge 0000000a link15 + + Name: ngeth57 Type: eiface ID: 000004a3 Num hooks: 0 + + Name: ng0_matrix Type: eiface ID: 000000a5 Num hooks: 1 + Local hook Peer name Peer type Peer ID Peer hook + ---------- --------- --------- ------- --------- + ether localbridge bridge 0000000a link7 + + Name: ngeth48 Type: eiface ID: 000003b1 Num hooks: 1 + Local hook Peer name Peer type Peer ID Peer hook + ---------- --------- --------- ------- --------- + ether localbridge bridge 0000000a link21 + + Name: ng1_matrix Type: eiface ID: 000000b2 Num hooks: 1 + Local hook Peer name Peer type Peer ID Peer hook + ---------- --------- --------- ------- --------- + ether tincbridge bridge 0000002b link6 + + Name: ngctl39192 Type: socket ID: 000004b4 Num hooks: 0 + + Name: ng1_mgmt Type: eiface ID: 000001b4 Num hooks: 1 + Local hook Peer name Peer type Peer ID Peer hook + ---------- --------- --------- ------- --------- + ether tincbridge bridge 0000002b link13 + + Name: ng0_ca Type: eiface ID: 000002b7 Num hooks: 1 + Local hook Peer name Peer type Peer ID Peer hook + ---------- --------- --------- ------- --------- + ether localbridge bridge 0000000a link16 + + Name: ng0_net Type: eiface ID: 000000c1 Num hooks: 1 + Local hook Peer name Peer type Peer ID Peer hook + ---------- --------- --------- ------- --------- + ether localbridge bridge 0000000a link8 + + Name: ng2_mgmt Type: eiface ID: 000001c2 Num hooks: 1 + Local hook Peer name Peer type Peer ID Peer hook + ---------- --------- --------- ------- --------- + ether pubbridge bridge 00000038 link7 + + Name: ng1_ca Type: eiface ID: 000002cd Num hooks: 1 + Local hook Peer name Peer type Peer ID Peer hook + ---------- --------- --------- ------- --------- + ether tincbridge bridge 0000002b link15 + + Name: ng0_kraui Type: eiface ID: 000003ce Num hooks: 1 + Local hook Peer name Peer type Peer ID Peer hook + ---------- --------- --------- ------- --------- + ether localbridge bridge 0000000a link22 + + Name: ng1_net Type: eiface ID: 000000cf Num hooks: 1 + Local hook Peer name Peer type Peer ID Peer hook + ---------- --------- --------- ------- --------- + ether tincbridge bridge 0000002b link7 + + Name: ng2_net Type: eiface ID: 000000d8 Num hooks: 1 + Local hook Peer name Peer type Peer ID Peer hook + ---------- --------- --------- ------- --------- + ether as43069bridge bridge 00000011 link2 + + Name: ng0_grafana Type: eiface ID: 000002e5 Num hooks: 1 + Local hook Peer name Peer type Peer ID Peer hook + ---------- --------- --------- ------- --------- + ether localbridge bridge 0000000a link17 + + Name: ng1_kraui Type: eiface ID: 000003e9 Num hooks: 1 + Local hook Peer name Peer type Peer ID Peer hook + ---------- --------- --------- ------- --------- + ether tincbridge bridge 0000002b link20 + + Name: ng0_front Type: eiface ID: 000000f7 Num hooks: 1 + Local hook Peer name Peer type Peer ID Peer hook + ---------- --------- --------- ------- --------- + ether localbridge bridge 0000000a link9 + + Name: ng1_grafana Type: eiface ID: 000002fc Num hooks: 1 + Local hook Peer name Peer type Peer ID Peer hook + ---------- --------- --------- ------- --------- + ether tincbridge bridge 0000002b link16 diff --git a/commands/freebsd/netgraph/_netgraph.sh b/commands/freebsd/netgraph/_netgraph.sh new file mode 100644 index 0000000..d30ff76 --- /dev/null +++ b/commands/freebsd/netgraph/_netgraph.sh @@ -0,0 +1,7 @@ +include_cmd_dir "../_freebsd.sh" + +netgraph_prerun() { + freebsd_ensure + freebsd_ensure_kernel_module_loaded netgraph + ensure_command_exists ngctl +} diff --git a/commands/freebsd/netgraph/list-nodes b/commands/freebsd/netgraph/list-nodes new file mode 100755 index 0000000..4ebcd63 --- /dev/null +++ b/commands/freebsd/netgraph/list-nodes @@ -0,0 +1,111 @@ +#!./cloyster +include_cmd_dir '_netgraph.sh' + +awkk=$(cat <<AWK +BEGIN { + RS="#"; + FS="|"; +} +{ print $1; } +AWK +) + +_netgraph_list_reformat() { + _input="${1}" + echo "${_input}" | \ + tail -n +2 | \ + grep -v "Local hook" | \ + grep -v "\----------" | \ + sed -e 's:^ ::g' \ + -e 's:Name\: ::g' -e 's:Type\: ::g' -e 's:ID\: ::g' -e 's:Num hooks\: ::g' | \ + tr '\n' ':' | \ + sed -e "s/::/#/g" | \ + awk '{gsub(/ {2,}/, "|")}; $1' | \ + sed -e "s/|$//g" -e "s/|:$//g" | \ + FS='[:]' awk -F'[:]' "${awkk}" + #) || fail "awk exited: $?" +} + +_netgraph_list_json= +_netgraph_list_to_json() { + if [ -z "${_netgraph_list_json}" ]; then + _input="${1}" + _ifs=$IFS + _json=$(jo nodes="{}") + for _line in ${_input}; do + _at=0; _node=; _nodename= + IFS=: + for _row in ${_line}; do + _at=$((_at + 1)) + IFS='|' + set -- "" + _hook=; + for _field in ${_row}; do set -- "${@}" "${_field}"; done + if [ "${_at}" = "1" ]; then + _nodename="${2}" + _node=$(jo node="${_nodename}" type="${3}" id="${4}" links_count="${5}" hooks=[]) + else + _hook=$(jo hook="${2}" peer_name="${3}" peer_type="${4}" peer_id="${5}" peer_hook="${6}") + _node=$(echo "$_node" | jo -f - hooks[]="${_hook}") + fi + done + _json=$(echo "$_json" | jo -d. -f - "nodes.${_nodename}=${_node}") + done + IFS=$_ifs + _netgraph_list_json="${_json}" + else + "${_netgraph_list_json}" + fi + echo "${_netgraph_list_json}" +} + +RUN + netgraph_prerun + list="$(ngctl list -l)" + reformatted=$(_netgraph_list_reformat "${list}") + json=$(_netgraph_list_to_json "${reformatted}") + return_result "${json}" +ENDR + +_test "awk" +TEST + input="$(cat "${CLOYSTER_COMMAND_DIR}/.mock.ngctl.list.l.txt")" + assert_exited $? 0 "could not read mock data file" + assert "test -n \"${input}\"" + (echo "$input" | grep "There are 66 total nodes" >/dev/null) + assert_exited $? 0 "mock input does not contains banner" + (echo "$input" | grep "ng0_" >/dev/null) + assert_exited $? 0 "mock input does not contains ng0_" + + reformatted=$(_netgraph_list_reformat "${input}") + + (echo "$reformatted" | grep "There are 66 total nodes" >/dev/null); s=$? + assert_exited "$s" 1 "reformat output contains banner" + + (echo "$reformatted" | grep "ng0" > /dev/null); s=$? + assert_exited $s 0 "reformat output does not contains ng0" + + json=$(_netgraph_list_to_json "${reformatted}") + + (echo "${json}" | jq >/dev/null) + assert_exited $? 0 "json couldn't get parsed by jq" + + # shellcheck disable=SC2034 + count=$(echo "${json}" | jq '[.nodes[].node] | length') + assert_exited $? 0 "json query failed" + assert "echo \"\${count}\"" "67" "should contain 67 nodes" + +# assert "$(echo ${json}) | jq '[.nodes[].node] | length'" "67" "should contain 67 nodes" +ENDT + +_test "runs on freebsd" .tag:integration .if:freebsd .skip:FIXME +TEST + # ( /bin/su -l $(whoami) /bin/sh ${CLOYSTER_COMMAND_FILE} ) + exit 1 +ENDT + +_test "doesnt run on freebsd" .tag:integration .not:freebsd .refute +TEST + ( ${CLOYSTER_COMMAND_FILE} ) +ENDT + |