ci: sync with current prplos branch state

Sync CI bits with the current state in prplos branch on commit
9af7fff65169 ("ci: fix build Docker image sdk-x86-64 job").

Signed-off-by: Petr Štetiar <ynezz@true.cz>
This commit is contained in:
Petr Štetiar
2022-11-30 09:33:24 +01:00
committed by Petr Štetiar
parent 89246ad4a4
commit 68dd0400d6
28 changed files with 19371 additions and 159 deletions

View File

@@ -4,6 +4,8 @@ variables:
include:
- local: .gitlab/build.yml
- local: .gitlab/cdrouter.yml
- local: .gitlab/cdrouter/glinet-b1300.yml
- local: .gitlab/cdrouter/turris-omnia.yml
- local: .gitlab/coverity.yml
- local: .gitlab/docker.yml
- local: .gitlab/docker/builder/gitlab.yml
@@ -26,87 +28,35 @@ stages:
- cdrouter
- coverity
.build test intel_mips prpl:
.build test intel_mips prpl webui:
extends: .build test config
build test ipq40xx prpl:
build test ipq40xx prpl webui:
extends: .build test config
build test mvebu prpl:
build test mvebu prpl webui:
extends: .build test config
coverity scan ipq40xx prpl:
extends: .coverity scan config
build test x86_64 prpl webui:
extends: .build test config
variables:
CI_COVERITY_COMPILER_TEMPLATE_LIST: >
arm-openwrt-linux-gcc
arm-openwrt-linux-muslgnueabi-gcc
CI_BUILD_CONFIG: >
+DEVEL +BUILD_LOG +SDK +IB +IB_STANDALONE
.run test NEC WX3000HP with system on NAND:
.run test NEC WX3000HP NAND:
needs:
- build test intel_mips prpl
- job: build test intel_mips prpl webui
optional: true
extends: .nec-wx3000hp testbed
run test Gl.iNet B1300 with system on initramfs:
run test Gl.iNet B1300 initramfs:
needs:
- build test ipq40xx prpl
- job: build test ipq40xx prpl webui
optional: true
extends: .glinet-b1300 testbed
run test Turris Omnia with system on initramfs:
run test Turris Omnia initramfs:
needs:
- build test mvebu prpl
- job: build test mvebu prpl webui
optional: true
extends: .turris-omnia testbed
.CDRouter CDRouter-Top-100 package on NEC WX3000HP with system on NAND:
needs:
- build test intel_mips prpl
extends:
- .nec-wx3000hp testbed
- .cdrouter
variables:
LABGRID_TARGET: "$DUT_BOARD-firstboot"
CDRouter CDRouter-Top-100 package on Gl.iNet B1300 with system on initramfs:
needs:
- build test ipq40xx prpl
extends:
- .glinet-b1300 testbed
- .cdrouter
CDRouter CDRouter-Top-100 package on Turris Omnia with system on initramfs:
needs:
- build test mvebu prpl
extends:
- .turris-omnia testbed
- .cdrouter
.CDRouter CDRouter-TR-069 package on NEC WX3000HP with system on NAND:
allow_failure: true
needs:
- build test intel_mips prpl
extends:
- .nec-wx3000hp testbed
- .cdrouter
CDRouter CDRouter-TR-069 package on Gl.iNet B1300 with system on NOR:
allow_failure: true
needs:
- build test ipq40xx prpl
extends:
- .glinet-b1300 testbed
- .cdrouter
variables:
LABGRID_TARGET: glinet-b1300-nor
TFTP_IMAGE_FILENAME: openwrt-ipq40xx-generic-glinet_gl-b1300-squashfs-sysupgrade.bin
CDRouter CDRouter-TR-069 package on Turris Omnia with system on eMMC:
allow_failure: true
needs:
- build test mvebu prpl
extends:
- .turris-omnia testbed
- .cdrouter
variables:
LABGRID_TARGET: turris-omnia-emmc
TFTP_IMAGE_FILENAME: openwrt-mvebu-cortexa9-cznic_turris-omnia-sysupgrade.img.gz
TFTP_IMAGE_UNPACK_COMMAND: "gunzip --force $TESTBED_TFTP_PATH/$TFTP_IMAGE_FILENAME || true"

View File

@@ -7,23 +7,32 @@
- if: '$CI_COMMIT_BRANCH == $CI_DESIGNATED_BRANCH'
- when: manual
variables:
TEST_CONFIG: generic
CDROUTER_TEST_CONFIG: generic
DUT_SLEEP_AFTER_BOOT: 20
CDROUTER_LAN_INTERFACE: eth1
CDROUTER_WAN_INTERFACE: eth2
CDROUTER_ETH0_MAC_ADDRESS: 00:03:2d:49:2e:d8
CDROUTER_ETH0_MAC_ADDRESS_TESTBED_02: 00:03:2d:49:2e:c8
before_script:
- sudo etherwake -i $TESTBED_MNG_INTERFACE $CDROUTER_ETH0_MAC_ADDRESS 2> /dev/null
- >
if echo "$CI_RUNNER_DESCRIPTION" | grep -q testbed-01; then
sudo etherwake -i $TESTBED_MNG_INTERFACE $CDROUTER_ETH0_MAC_ADDRESS 2> /dev/null
else
sudo etherwake -i $TESTBED_MNG_INTERFACE $CDROUTER_ETH0_MAC_ADDRESS_TESTBED_02 2> /dev/null
fi
- sudo ip link set $TESTBED_LAN_INTERFACE up 2> /dev/null
- sudo ip link set $TESTBED_WAN_INTERFACE up 2> /dev/null
- sleep 10
- eval $(ssh-agent -s)
- echo "$TESTBED_SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add -
- mkdir -p ~/.ssh; chmod 700 ~/.ssh
- ssh-keyscan $TESTBED_UART_RELAY_HOST > ~/.ssh/known_hosts 2> /dev/null
- chmod 644 ~/.ssh/known_hosts
- >
if echo "$CI_RUNNER_DESCRIPTION" | grep -q testbed-01; then
eval $(ssh-agent -s)
echo "$TESTBED_SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add -
ssh-keyscan $TESTBED_UART_RELAY_HOST > ~/.ssh/known_hosts 2> /dev/null
chmod 644 ~/.ssh/known_hosts
fi
- >
if [ -n "$TFTP_IMAGE_DOWNLOAD_URL" ]; then
@@ -38,6 +47,12 @@
echo "Running $TFTP_IMAGE_UNPACK_COMMAND"
eval "$TFTP_IMAGE_UNPACK_COMMAND"
fi
- >
if echo "$CI_RUNNER_DESCRIPTION" | grep -q testbed-02; then
export TB_CONFIG=".testbed/labgrid/testbed-02.yaml"
fi
- .gitlab/scripts/testbed-device.py --target $LABGRID_TARGET boot_into shell
- sudo ip link set $TESTBED_WAN_INTERFACE down 2> /dev/null
- >
@@ -46,21 +61,22 @@
--network lan
--remote-host $TARGET_LAN_TEST_HOST
- >
retry_count=3;
while [ $retry_count -gt 0 ]; do
echo "Waiting for SSH availability on $TARGET_LAN_IP"
ssh-keyscan "$TARGET_LAN_IP" 2>&1 | grep -q "$TARGET_LAN_IP" && break
retry_count="$(( retry_count - 1 ))"
sleep 5
done
- echo "Waiting for SSH connection availability with ${DUT_SSH_CONNECT_TIMEOUT}sec timeout, with $DUT_SSH_CONNECT_ATTEMPTS attempts..."
- time ssh -o BatchMode=yes -o StrictHostKeyChecking=no -o ConnectionAttempts=$DUT_SSH_CONNECT_ATTEMPTS -o ConnectTimeout=$DUT_SSH_CONNECT_TIMEOUT root@$TARGET_LAN_IP 'exit 0'
- ssh-keyscan $TARGET_LAN_IP >> ~/.ssh/known_hosts 2> /dev/null
- ssh root@$TARGET_LAN_IP "cat /var/log/messages" > syslog-$LABGRID_TARGET.txt 2> /dev/null || true
- ssh root@$TARGET_LAN_IP "ubus call system board" | tee system-$LABGRID_TARGET.json
- scp .gitlab/mockups/tr181-mockups.tar.gz root@${TARGET_LAN_IP}:/tmp/
- ssh root@$TARGET_LAN_IP "tar xzf /tmp/tr181-mockups.tar.gz -C / && /etc/init.d/tr181-mockups start"
- >
for dut_init_script in $DUT_INIT_SCRIPTS;
do echo "Running $dut_init_script"; /bin/sh "$dut_init_script";
done
- >
if echo "$CI_RUNNER_DESCRIPTION" | grep -q testbed-02; then
export CDROUTER_API_TOKEN="$CDROUTER_API_TOKEN_TESTBED_02"
fi
- .gitlab/scripts/testbed-cdrouter.py package_stop
- .gitlab/scripts/testbed-cdrouter.py wait_for_netif $CDROUTER_LAN_INTERFACE
@@ -71,14 +87,19 @@
script:
- sleep $DUT_SLEEP_AFTER_BOOT
- export TEST_PACKAGE="$(echo $CI_JOB_NAME | sed 's/CDRouter \(.*\) package on .*/\1/')"
- .gitlab/scripts/testbed-cdrouter.py config_import $TEST_CONFIG
- >
if echo "$CI_RUNNER_DESCRIPTION" | grep -q testbed-02; then
export CDROUTER_API_TOKEN="$CDROUTER_API_TOKEN_TESTBED_02"
fi
- export TEST_PACKAGE="$(echo $CI_JOB_NAME | sed 's/\(\w\) .*/\1/')"
- .gitlab/scripts/testbed-cdrouter.py config_import $CDROUTER_TEST_CONFIG
- .gitlab/scripts/testbed-cdrouter.py package_import $TEST_PACKAGE.gz
- >
.gitlab/scripts/testbed-cdrouter.py
package_run $TEST_PACKAGE
--device generic
--configuration $TEST_CONFIG
--configuration $CDROUTER_TEST_CONFIG
--system-info system-$LABGRID_TARGET.json
after_script:
@@ -89,16 +110,30 @@
cat cdrouter-results/final.txt &&
.gitlab/scripts/cdrouter-pretty-failures.awk cdrouter-results/*.txt
- eval $(ssh-agent -s)
- echo "$TESTBED_SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add -
- mkdir -p ~/.ssh; chmod 700 ~/.ssh
- ssh-keyscan $TESTBED_UART_RELAY_HOST > ~/.ssh/known_hosts 2> /dev/null
- chmod 644 ~/.ssh/known_hosts
- >
if echo "$CI_RUNNER_DESCRIPTION" | grep -q testbed-01; then
eval $(ssh-agent -s)
echo "$TESTBED_SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add -
ssh-keyscan $TESTBED_UART_RELAY_HOST > ~/.ssh/known_hosts 2> /dev/null
chmod 644 ~/.ssh/known_hosts
fi
- sudo ip link set $TESTBED_LAN_INTERFACE up 2> /dev/null
- sudo ip link set $TESTBED_WAN_INTERFACE up 2> /dev/null
- sleep 5
- >
if echo "$CI_RUNNER_DESCRIPTION" | grep -q testbed-02; then
export TB_CONFIG=".testbed/labgrid/testbed-02.yaml"
fi
- >
ssh -o BatchMode=yes -o StrictHostKeyChecking=no -o ConnectTimeout=15 root@$TARGET_LAN_IP 'exit 0' || {
.gitlab/scripts/testbed-device.py --target $LABGRID_TARGET console_dump_system_state
.gitlab/scripts/testbed-device.py --target $LABGRID_TARGET console_recover_ssh_access
} || true
- ssh-keyscan $TARGET_LAN_IP >> ~/.ssh/known_hosts 2> /dev/null
- >
ssh root@$TARGET_LAN_IP exit && {
@@ -113,6 +148,10 @@
- .gitlab/scripts/testbed-device.py --target $LABGRID_TARGET power off
- mv console_$LABGRID_TARGET console_$LABGRID_TARGET.txt || true
- >
if echo "$CI_RUNNER_DESCRIPTION" | grep -q testbed-02; then
export CDROUTER_API_TOKEN="$CDROUTER_API_TOKEN_TESTBED_02"
fi
- .gitlab/scripts/testbed-cdrouter.py package_stop
artifacts:

View File

@@ -0,0 +1,63 @@
.glinet-cdrouter: &glinet_cdrouter
needs:
- job: build test ipq40xx prpl webui
optional: true
extends:
- .glinet-b1300 testbed
- .cdrouter
CDRouter-Top-100+mDNS Gl.iNet initramfs:
<<: *glinet_cdrouter
CDRouter-Top-100+mDNS Gl.iNet VLAN WAN/LAN initramfs:
<<: *glinet_cdrouter
variables:
CDROUTER_TEST_CONFIG: vlan
DUT_INIT_SCRIPTS: |
.gitlab/scripts/dut-init/cdrouter-dut-enable-vlans.sh
CDRouter-Top-100+mDNS Gl.iNet PPPoE WAN initramfs:
<<: *glinet_cdrouter
variables:
CDROUTER_TEST_CONFIG: ppp
DUT_INIT_SCRIPTS: |
.gitlab/scripts/dut-init/cdrouter-dut-enable-pppoe.sh
.glinet-cdrouter-ipv6: &glinet_cdrouter_ipv6
<<: *glinet_cdrouter
allow_failure: true
rules:
- if: '$TFTP_IMAGE_DOWNLOAD_URL =~ $TFTP_IMAGE_FILENAME_PATTERN'
when: always
- if: '$TFTP_IMAGE_DOWNLOAD_URL'
when: never
- when: manual
CDRouter-IPv6-Top-100+mDNS Gl.iNet initramfs:
<<: *glinet_cdrouter_ipv6
variables:
CDROUTER_TEST_CONFIG: generic-ipv6
CDRouter-IPv6-Top-100+mDNS Gl.iNet VLAN WAN/LAN initramfs:
<<: *glinet_cdrouter_ipv6
variables:
CDROUTER_TEST_CONFIG: vlan-ipv6
DUT_INIT_SCRIPTS: |
.gitlab/scripts/dut-init/cdrouter-dut-enable-vlans.sh
CDRouter-TR-069 Gl.iNet NOR:
<<: *glinet_cdrouter
variables:
LABGRID_TARGET: glinet-b1300-nor
TFTP_IMAGE_FILENAME: openwrt-ipq40xx-generic-glinet_gl-b1300-squashfs-sysupgrade.bin
TFTP_IMAGE_FILENAME_PATTERN: /.*openwrt-ipq40xx-generic-glinet_gl-b1300-squashfs-sysupgrade.bin/
DUT_INIT_SCRIPTS: |
.gitlab/scripts/dut-init/cdrouter-tr181-mockups.sh
CDRouter-IPv6-Top-100+mDNS Gl.iNet PPPoE WAN initramfs:
<<: *glinet_cdrouter_ipv6
variables:
CDROUTER_TEST_CONFIG: ppp-ipv6
DUT_INIT_SCRIPTS: |
.gitlab/scripts/dut-init/cdrouter-dut-enable-pppoe.sh

View File

@@ -0,0 +1,64 @@
.turris-cdrouter: &turris_cdrouter
needs:
- job: build test mvebu prpl webui
optional: true
extends:
- .turris-omnia testbed
- .cdrouter
CDRouter-Top-100+mDNS Turris initramfs:
<<: *turris_cdrouter
CDRouter-Top-100+mDNS Turris VLAN WAN/LAN initramfs:
<<: *turris_cdrouter
variables:
CDROUTER_TEST_CONFIG: vlan
DUT_INIT_SCRIPTS: |
.gitlab/scripts/dut-init/cdrouter-dut-enable-vlans.sh
CDRouter-Top-100+mDNS Turris PPPoE WAN initramfs:
<<: *turris_cdrouter
variables:
CDROUTER_TEST_CONFIG: ppp
DUT_INIT_SCRIPTS: |
.gitlab/scripts/dut-init/cdrouter-dut-enable-pppoe.sh
.turris-cdrouter-ipv6: &turris_cdrouter_ipv6
<<: *turris_cdrouter
allow_failure: true
rules:
- if: '$TFTP_IMAGE_DOWNLOAD_URL =~ $TFTP_IMAGE_FILENAME_PATTERN'
when: always
- if: '$TFTP_IMAGE_DOWNLOAD_URL'
when: never
- when: manual
CDRouter-IPv6-Top-100+mDNS Turris initramfs:
<<: *turris_cdrouter_ipv6
variables:
CDROUTER_TEST_CONFIG: generic-ipv6
CDRouter-IPv6-Top-100+mDNS Turris VLAN WAN/LAN initramfs:
<<: *turris_cdrouter_ipv6
variables:
CDROUTER_TEST_CONFIG: vlan-ipv6
DUT_INIT_SCRIPTS: |
.gitlab/scripts/dut-init/cdrouter-dut-enable-vlans.sh
CDRouter-IPv6-Top-100+mDNS Turris PPPoE WAN initramfs:
<<: *turris_cdrouter_ipv6
variables:
CDROUTER_TEST_CONFIG: ppp-ipv6
DUT_INIT_SCRIPTS: |
.gitlab/scripts/dut-init/cdrouter-dut-enable-pppoe.sh
CDRouter-TR-069 Turris eMMC:
<<: *turris_cdrouter
variables:
LABGRID_TARGET: turris-omnia-emmc
TFTP_IMAGE_FILENAME: openwrt-mvebu-cortexa9-cznic_turris-omnia-sysupgrade.img.gz
TFTP_IMAGE_FILENAME_PATTERN: /.*openwrt-mvebu-cortexa9-cznic_turris-omnia-sysupgrade.img.gz/
TFTP_IMAGE_UNPACK_COMMAND: "gunzip --force $TESTBED_TFTP_PATH/$TFTP_IMAGE_FILENAME || true"
DUT_INIT_SCRIPTS: |
.gitlab/scripts/dut-init/cdrouter-tr181-mockups.sh

View File

@@ -1,6 +1,6 @@
.build Docker image sdk-intel_mips-xrx500:
stage: docker SDK
needs: ["build test intel_mips prpl"]
needs: ["build test intel_mips prpl webui"]
variables:
DOCKER_DOCKERFILE_PATH: .gitlab/docker/sdk
DOCKER_BUILD_EXTRA_ARGS: --build-arg DESIGNATED_BRANCH=$CI_DESIGNATED_BRANCH
@@ -20,7 +20,7 @@
build Docker image sdk-ipq40xx-generic:
stage: docker SDK
needs: ["build test ipq40xx prpl"]
needs: ["build test ipq40xx prpl webui"]
variables:
DOCKER_DOCKERFILE_PATH: .gitlab/docker/sdk
DOCKER_BUILD_EXTRA_ARGS: --build-arg DESIGNATED_BRANCH=$CI_DESIGNATED_BRANCH
@@ -40,7 +40,7 @@ deploy Docker image sdk-ipq40xx-generic:
build Docker image sdk-mvebu-cortexa9:
stage: docker SDK
needs: ["build test mvebu prpl"]
needs: ["build test mvebu prpl webui"]
variables:
DOCKER_DOCKERFILE_PATH: .gitlab/docker/sdk
DOCKER_BUILD_EXTRA_ARGS: --build-arg DESIGNATED_BRANCH=$CI_DESIGNATED_BRANCH
@@ -56,3 +56,23 @@ deploy Docker image sdk-mvebu-cortexa9:
stage: docker SDK deploy
extends: .deploy Docker image
needs: ["test Docker image sdk-mvebu-cortexa9"]
build Docker image sdk-x86-64:
stage: docker SDK
needs: ["build test x86_64 prpl webui"]
variables:
DOCKER_DOCKERFILE_PATH: .gitlab/docker/sdk
DOCKER_BUILD_EXTRA_ARGS: --build-arg DESIGNATED_BRANCH=$CI_DESIGNATED_BRANCH
extends: .build Docker image
before_script:
- tar xf bin/targets/x86/64/openwrt-sdk-x86-64_gcc*.Linux-x86_64.tar.xz --strip=1 -C .gitlab/docker/sdk
test Docker image sdk-x86-64:
extends: .test Docker SDK image
needs: ["build Docker image sdk-x86-64"]
deploy Docker image sdk-x86-64:
stage: docker SDK deploy
extends: .deploy Docker image
needs: ["test Docker image sdk-x86-64"]

View File

@@ -28,14 +28,15 @@ RUN \
RUN localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8
ENV LANG=en_US.utf8
ENV LABGRID_COMMIT=e1da2a319314
RUN git clone --branch wip/testbed-next https://gitlab.com/prpl-foundation/prplOS/labgrid
ENV LABGRID_COMMIT=0e1ef80ca803
RUN git clone --branch wip/testbed https://gitlab.com/prpl-foundation/prplOS/labgrid
WORKDIR labgrid
RUN git reset --hard $LABGRID_COMMIT
RUN \
pip3 install -U pip && \
pip3 install -r requirements.txt && \
pip3 install -r modbus-requirements.txt && \
python3 setup.py install && \
rm -fr /labgrid

Binary file not shown.

View File

@@ -0,0 +1,9 @@
#!/bin/bash
ssh root@$TARGET_LAN_IP "ubus -t 200 wait_for PPP"
ssh root@$TARGET_LAN_IP "ubus -t 200 wait_for DHCPv4"
ssh root@$TARGET_LAN_IP "ubus -t 200 wait_for IP"
ssh root@$TARGET_LAN_IP "ubus call DHCPv4.Client.1 _set '{\"parameters\":{\"Enable\":0}}'"
ssh root@$TARGET_LAN_IP "ubus call PPP.Interface.1 _set '{\"parameters\":{\"Enable\":1}}'"
ssh root@$TARGET_LAN_IP "ubus call IP.Interface.2 _set '{\"parameters\":{\"LowerLayers\":\"Device.PPP.Interface.1.\"}}'"
ssh root@$TARGET_LAN_IP "ubus call IP.Interface.2.IPv4Address.1 _set '{\"parameters\":{\"AddressingType\":\"IPCP\"}}'"

View File

@@ -0,0 +1,4 @@
#!/bin/bash
.gitlab/scripts/testbed-device.py --target "$LABGRID_TARGET" init_vlans
true

View File

@@ -0,0 +1,4 @@
#!/bin/bash
scp .gitlab/mockups/tr181-mockups.tar.gz root@${TARGET_LAN_IP}:/tmp/
ssh root@$TARGET_LAN_IP "tar xzf /tmp/tr181-mockups.tar.gz -C / && /etc/init.d/tr181-mockups start"

View File

@@ -240,20 +240,10 @@ class JiraHelper:
self.login()
def login(self):
cert_data = None
args = self.args
with open(args.private_key, "r", errors="ignore") as cert_file:
cert_data = cert_file.read()
oauth_dict = {
"access_token": args.access_token,
"access_token_secret": args.access_token_secret,
"consumer_key": args.consumer_key,
"key_cert": cert_data,
}
self.jira = JIRA({"server": args.instance_url}, oauth=oauth_dict)
self.jira = JIRA(
args.instance_url, basic_auth=(args.api_username, args.api_token)
)
def create_or_update_issue(self, failure_type, failure_details):
args = self.args
@@ -378,24 +368,17 @@ def main():
)
parser.add_argument(
"--access-token",
"--api-username",
type=str,
default=os.environ.get("JIRA_ACCESS_TOKEN"),
help="Jira access token (default: %(default)s)",
default=os.environ.get("JIRA_API_USERNAME"),
help="Jira API username",
)
parser.add_argument(
"--access-token-secret",
"--api-token",
type=str,
default=os.environ.get("JIRA_ACCESS_TOKEN_SECRET"),
help="Jira access token secret",
)
parser.add_argument(
"--consumer-key",
type=str,
default=os.environ.get("JIRA_CONSUMER_KEY"),
help="Jira consumer key",
default=os.environ.get("JIRA_API_TOKEN"),
help="Jira API token",
)
parser.add_argument(
@@ -405,13 +388,6 @@ def main():
help="Jira instance URL (default: %(default)s)",
)
parser.add_argument(
"--private-key",
type=str,
default=os.environ.get("JIRA_PRIVATE_KEY"),
help="Jira private key",
)
parser.add_argument(
"--project",
type=str,

View File

@@ -4,18 +4,234 @@ import argparse
import os
import sys
import logging
import json
import time
from labgrid import Environment, StepReporter
from labgrid.driver import ExecutionError
from labgrid.consoleloggingreporter import ConsoleLoggingReporter
class OpenWrtConsoleShell:
def __init__(self, args, shell):
self.args = args
self.shell = shell
def run(self, cmd):
result = None
try:
logging.info(f"executing: {cmd}")
result = self.shell.run_check(cmd)
except ExecutionError as e:
stdout = " ".join(e.stdout)
stderr = " ".join(e.stderr)
logging.error(f"failed: '{e.msg}' stdout='{stdout}' stderr='{stderr}'")
return None, (e.msg, e.stdout, e.stderr)
if len(result) > 0:
logging.info("result:\n" + "\n".join(result) + "\n" + "-" * 80)
return result
def ubus_call(self, cmd):
result = None
cmd = f"ubus call {cmd}"
try:
logging.info(f"executing: {cmd}")
result = self.shell.run_check(cmd)
except ExecutionError as e:
stdout = " ".join(e.stdout).replace("\t", "")
stderr = " ".join(e.stderr)
logging.error(f"failed: {e.msg} stdout='{stdout}' stderr='{stderr}'")
return None, e.stdout[-1], (e.msg, e.stdout, e.stderr)
result = json.loads(" ".join(result))
logging.info(f"result: {result}")
return result
class UbusTR181:
def __init__(self, args, shell):
self.args = args
self.shell = shell
def api_call(self, method, path, parameters=None):
cmd = f"{path} {method}"
if parameters:
p = json.dumps({"parameters": parameters})
cmd += f" '{p}'"
return self.shell.ubus_call(cmd)
def get(self, path, parameters=None):
return self.api_call("_get", path, parameters)
def set(self, path, parameters):
return self.api_call("_set", path, parameters)
def add(self, path, parameters):
return self.api_call("_add", path, parameters)
def remove(self, path, parameters=None):
return self.api_call("_del", path, parameters)
def call(self, path, method, parameters):
cmd = f"{path} {method}"
if parameters:
p = json.dumps(parameters)
cmd += f" '{p}'"
return self.shell.ubus_call(cmd)
class TestbedDevice:
def __init__(self, args):
self.args = args
self.shell = None
self.env = Environment(config_file=self.args.config)
ConsoleLoggingReporter.start(args.console_logpath)
self.target = self.env.get_target(args.target)
def init_shell(self):
if self.shell:
return
self.shell_driver = self.target.get_driver("ShellDriver")
self.shell = OpenWrtConsoleShell(self.args, self.shell_driver)
def init_swconfig_glinet(self):
self.shell.run("swconfig dev switch0 vlan 1 set vid 201")
self.shell.run("swconfig dev switch0 vlan 1 set ports '0t 3t 4t'")
self.shell.run("swconfig dev switch0 vlan 2 set vid 101")
self.shell.run("swconfig dev switch0 vlan 2 set ports '0t 5t'")
self.shell.run("swconfig dev switch0 vlan 1 show")
self.shell.run("swconfig dev switch0 vlan 2 show")
self.shell.run(
"""
uci add network switch_vlan &&
uci set network.@switch_vlan[-1]=switch_vlan &&
uci set network.@switch_vlan[-1].device='switch0' &&
uci set network.@switch_vlan[-1].vlan='2' &&
uci set network.@switch_vlan[-1].vid='101' &&
uci set network.@switch_vlan[-1].ports='0t 5t' &&
uci set network.@switch_vlan[0].vid='201' &&
uci set network.@switch_vlan[0].ports='3t 4t 0t' &&
uci commit network
"""
)
def _init_swconfig(self):
if self.board_name.startswith("glinet"):
self.init_swconfig_glinet()
def _init_wan_vlan(self):
self.shell.run("ubus -t 60 wait_for X_PRPL-COM_WANManager.WAN")
self.ubus_tr181.set("X_PRPL-COM_WANManager.WAN.2.Intf.1", {"VlanID": 101})
self.ubus_tr181.call(
"X_PRPL-COM_WANManager", "setWANMode", {"WANMode": "demo_vlanmode"}
)
def _init_lan_vlan(self):
bridge_lan_ports = {
"cznic,turris-omnia": "Bridging.Bridge.1.Port.5",
"EASY350 ANYWAN (GRX350) Axepoint Asurada model": "Bridging.Bridge.1.Port.5",
}
bridge_vlan_port = bridge_lan_ports.get(
self.board_name, "Bridging.Bridge.1.Port.2"
)
self.ubus_tr181.set("Bridging.Bridge.1", {"Standard": "802.1Q-2005"})
self.ubus_tr181.add(
"Bridging.Bridge.1.VLAN",
{"Alias": "vlan201", "Name": "vlan201", "VLANID": 201, "Enable": 1},
)
self.ubus_tr181.set(
f"{bridge_vlan_port}",
{
"AcceptableFrameTypes": "AdmitOnlyVLANTagged",
"PVID": "201",
"Type": "CustomerVLANPort",
"Enable": 1,
},
)
self.ubus_tr181.add(
"Bridging.Bridge.1.VLANPort",
{
"Alias": "LAN",
"Name": "vlan201",
"Port": f"Device.{bridge_vlan_port}.",
"VLAN": "Device.Bridging.Bridge.1.VLAN.1.",
"Enable": 1,
},
)
def init_vlans(self):
self.init_shell()
system_info = self.shell.ubus_call("system board")
if not system_info:
logging.error("Unable to determine running DUT board!")
return
self.board_name = system_info["board_name"]
logging.info(f"Running on {self.board_name} board")
self.ubus_tr181 = UbusTR181(self.args, self.shell)
self._init_wan_vlan()
self._init_lan_vlan()
self._init_swconfig()
logging.info(
"Let the system apply the new configuration, waiting 15 seconds..."
)
time.sleep(15)
self.ubus_tr181.get("Ethernet.VLANTermination")
self.shell.run("(cat /proc/vlan101 || cat /proc/net/vlan/vlan101) 2> /dev/null")
self.shell.run("(cat /proc/vlan201 || cat /proc/net/vlan/vlan201) 2> /dev/null")
self.shell.run("ip address show vlan101")
self.shell.run("ip address show vlan201")
self.shell.run("brctl show")
self.shell.run("ip route show")
def console_dump_system_state(self):
self.init_shell()
self.shell.ubus_call("system board")
self.shell.run("df -h || df")
self.shell.run("free -h || free")
self.shell.run("ps auxfw || ps w")
self.shell.run("cat /etc/config/network")
self.shell.run("brctl show")
self.shell.run("ip route show")
self.shell.run("ip address show")
self.shell.run("ip link show")
self.shell.run("iptables-save")
self.shell.run("ip6tables-save")
self.shell.run("cat /var/log/messages || logread")
self.ubus_tr181 = UbusTR181(self.args, self.shell)
self.ubus_tr181.call("IP", "_get", {"depth": 100})
self.ubus_tr181.call("NetDev", "_get", {"depth": 100})
self.ubus_tr181.call("NetModel", "_get", {"depth": 100})
self.ubus_tr181.call("Bridging", "_get", {"depth": 100})
self.ubus_tr181.call("Firewall", "_get", {"depth": 100})
def console_recover_ssh_access(self):
self.init_shell()
self.shell.run("iptables -P INPUT ACCEPT")
self.shell.run("iptables -L INPUT")
self.shell.run("/etc/init.d/dropbear restart; sleep 5")
self.shell.run("logread | grep dropbear | tail -10")
self.shell.run("netstat -nlp | grep :22")
self.shell.run("ping -c1 192.168.1.1; ping -c1 192.168.1.2")
def boot_into(self):
strategy = self.target.get_driver("UBootStrategy")
dest = self.args.destination
@@ -117,6 +333,22 @@ def main():
)
subparser.set_defaults(func=TestbedDevice.check_network)
subparser = subparsers.add_parser(
"init_vlans", help="initialize VLAN configuration"
)
subparser.set_defaults(func=TestbedDevice.init_vlans)
subparser = subparsers.add_parser(
"console_dump_system_state", help="dump system state using serial console"
)
subparser.set_defaults(func=TestbedDevice.console_dump_system_state)
subparser = subparsers.add_parser(
"console_recover_ssh_access",
help="try to recover SSH access using serial console",
)
subparser.set_defaults(func=TestbedDevice.console_recover_ssh_access)
args = parser.parse_args()
if args.verbose >= 1:
StepReporter.start()

View File

@@ -6,6 +6,8 @@ stages:
- build
.build feed with SDK:
tags:
- package-builder
stage: build
image: $CI_SDK_IMAGE
variables:
@@ -26,10 +28,6 @@ stages:
- >
for feed in $CI_SDK_INSTALL_FEEDS ci; do
sleep_interval="$(( (RANDOM % 60) + 1 ))"
echo "Waiting for $sleep_interval seconds..."
sleep "${sleep_interval}s"
./scripts/feeds update "$feed" ;
./scripts/feeds install -a -p "$feed" ;
done 2>&1 | tee logs/build.log
@@ -104,6 +102,11 @@ stages:
CI_SDK_BUILD_PACKAGES: |
please-provide
CI_SDK_PACKAGE_JOBS_TEMPLATE: |
{% if env['CI_SDK_PIPELINE_SOURCE'] %}
workflow:
rules:
- if: $$CI_PIPELINE_SOURCE == "{{ env['CI_SDK_PIPELINE_SOURCE'] }}"
{% endif %}
include:
- remote: https://gitlab.com/prpl-foundation/prplos/prplos/-/raw/$CI_DESIGNATED_BRANCH/.gitlab/sdk.yml
{% for sdk in env['CI_SDK_TARGETS'].rstrip().split("\n") %}
@@ -168,7 +171,18 @@ stages:
variables:
CI_SDK_IMAGE: registry.gitlab.com/prpl-foundation/prplos/prplos/$CI_DESIGNATED_BRANCH/sdk-mvebu-cortexa9:latest
.build feed with ath79-generic-22.03-SNAPSHOT SDK:
.build feed with x86-64 SDK:
extends: .build feed with SDK
variables:
CI_SDK_IMAGE: registry.gitlab.com/prpl-foundation/prplos/prplos/$CI_DESIGNATED_BRANCH/sdk-x86-64:latest
.build feed with ath79-generic-19.07.7 SDK:
extends: .build feed with OpenWrt SDK
variables:
CI_SDK_IMAGE: openwrt/sdk:ath79-generic-22.03-SNAPSHOT
CI_SDK_IMAGE: openwrtorg/sdk:ath79-generic-19.07.7
.build feed with x86-64-22.03.2 SDK:
extends: .build feed with OpenWrt SDK
variables:
CI_SDK_BEFORE_COMPILE_COMMAND: sudo apt-get update; sudo apt-get install -y python3-yaml
CI_SDK_IMAGE: openwrt/sdk:x86-64-22.03.2

View File

@@ -11,10 +11,16 @@
TESTBED_LAN_INTERFACE: enp2s0
TESTBED_WAN_INTERFACE: enp3s0
TESTBED_TFTP_PATH: /var/lib/tftpboot
TFTP_IMAGE_PATH: bin/targets/$DUT_ARCH/$DUT_SUBTARGET
TFTP_IMAGE_PATH: bin/targets/$DUT_TARGET/$DUT_SUBTARGET
PACKAGE_DIR: bin/packages
DUT_ARCH_PACKAGES_PATH: $PACKAGE_DIR/${DUT_ARCH}_${DUT_CPU_TYPE}_${DUT_CPU_SUBTYPE}
TARGET_LAN_IP: 192.168.1.1
TARGET_LAN_TEST_HOST: 192.168.1.2
DUT_SLEEP_AFTER_BOOT: 90
DUT_SSH_CONNECT_TIMEOUT: 30
DUT_SSH_CONNECT_ATTEMPTS: 3
DUT_TR181_WAN_INTERFACE: Device.Ethernet.Link.2.
DUT_TR181_LAN_INTERFACE: Device.Ethernet.Link.3.
CRAM_REMOTE_COMMAND: ssh root@$TARGET_LAN_IP
CRAM_TEST_SUITE: |
.gitlab/tests/cram/generic/acceleration-plan-components
@@ -29,11 +35,14 @@
- sudo ip link set $TESTBED_WAN_INTERFACE up 2> /dev/null
- sleep 10
- eval $(ssh-agent -s)
- echo "$TESTBED_SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add -
- mkdir -p ~/.ssh; chmod 700 ~/.ssh
- ssh-keyscan $TESTBED_UART_RELAY_HOST > ~/.ssh/known_hosts 2> /dev/null
- chmod 644 ~/.ssh/known_hosts
- >
if echo "$CI_RUNNER_DESCRIPTION" | grep -q testbed-01; then
eval $(ssh-agent -s)
echo "$TESTBED_SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add -
ssh-keyscan $TESTBED_UART_RELAY_HOST > ~/.ssh/known_hosts 2> /dev/null
chmod 644 ~/.ssh/known_hosts
fi
- >
if [ -n "$TFTP_IMAGE_DOWNLOAD_URL" ]; then
@@ -48,6 +57,12 @@
echo "Running $TFTP_IMAGE_UNPACK_COMMAND"
eval "$TFTP_IMAGE_UNPACK_COMMAND"
fi
- >
if echo "$CI_RUNNER_DESCRIPTION" | grep -q testbed-02; then
export TB_CONFIG=".testbed/labgrid/testbed-02.yaml"
fi
- .gitlab/scripts/testbed-device.py --target $LABGRID_TARGET boot_into shell
- >
.gitlab/scripts/testbed-device.py
@@ -55,14 +70,8 @@
--network lan
--remote-host $TARGET_LAN_TEST_HOST
- >
retry_count=3;
while [ $retry_count -gt 0 ]; do
echo "Waiting for SSH availability on $TARGET_LAN_IP"
ssh-keyscan "$TARGET_LAN_IP" 2>&1 | grep -q "$TARGET_LAN_IP" && break
retry_count="$(( retry_count - 1 ))"
sleep 5
done
- echo "Waiting for SSH connection availability with ${DUT_SSH_CONNECT_TIMEOUT}sec timeout, with $DUT_SSH_CONNECT_ATTEMPTS attempts..."
- time ssh -o BatchMode=yes -o StrictHostKeyChecking=no -o ConnectionAttempts=$DUT_SSH_CONNECT_ATTEMPTS -o ConnectTimeout=$DUT_SSH_CONNECT_TIMEOUT root@$TARGET_LAN_IP 'exit 0'
- ssh-keyscan $TARGET_LAN_IP >> ~/.ssh/known_hosts 2> /dev/null
- ssh root@$TARGET_LAN_IP "cat /var/log/messages" > syslog-$LABGRID_TARGET.txt 2> /dev/null || true
@@ -82,11 +91,25 @@
true
}
- eval $(ssh-agent -s)
- echo "$TESTBED_SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add -
- mkdir -p ~/.ssh; chmod 700 ~/.ssh
- ssh-keyscan $TESTBED_UART_RELAY_HOST > ~/.ssh/known_hosts 2> /dev/null
- chmod 644 ~/.ssh/known_hosts
- >
if echo "$CI_RUNNER_DESCRIPTION" | grep -q testbed-01; then
eval $(ssh-agent -s)
echo "$TESTBED_SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add -
ssh-keyscan $TESTBED_UART_RELAY_HOST > ~/.ssh/known_hosts 2> /dev/null
chmod 644 ~/.ssh/known_hosts
fi
- >
if echo "$CI_RUNNER_DESCRIPTION" | grep -q testbed-02; then
export TB_CONFIG=".testbed/labgrid/testbed-02.yaml"
fi
- >
ssh -o BatchMode=yes -o StrictHostKeyChecking=no -o ConnectTimeout=15 root@$TARGET_LAN_IP 'exit 0' || {
.gitlab/scripts/testbed-device.py --target $LABGRID_TARGET console_dump_system_state
.gitlab/scripts/testbed-device.py --target $LABGRID_TARGET console_recover_ssh_access
} || true
- ssh-keyscan $TARGET_LAN_IP >> ~/.ssh/known_hosts 2> /dev/null
- >

View File

@@ -1,11 +1,14 @@
.glinet-b1300 testbed:
extends: .testbed true.cz
variables:
DUT_ARCH: ipq40xx
DUT_ARCH: arm
DUT_TARGET: ipq40xx
DUT_SUBTARGET: generic
DUT_BOARD: glinet-b1300
DUT_WAN_INTERFACE: wan
DUT_CPU_TYPE: cortex-a7
DUT_CPU_SUBTYPE: neon-vfpv4
LABGRID_TARGET: glinet-b1300-initramfs
TFTP_IMAGE_FILENAME: openwrt-ipq40xx-generic-glinet_gl-b1300-initramfs-fit-zImage.itb
TFTP_IMAGE_FILENAME_PATTERN: /.*openwrt-ipq40xx-generic-glinet_gl-b1300-initramfs-fit-zImage.itb/
tags:
- dut-glinet-b1300

View File

@@ -1,10 +1,14 @@
.nec-wx3000hp testbed:
extends: .testbed true.cz
variables:
DUT_ARCH: intel_mips
DUT_ARCH: mips
DUT_TARGET: intel_mips
DUT_SUBTARGET: xrx500
DUT_BOARD: nec-wx3000hp
DUT_CPU_TYPE: 24kc
DUT_CPU_SUBTYPE: nomips16
LABGRID_TARGET: nec-wx3000hp-nand
TFTP_IMAGE_FILENAME: AX3000_1600_ETH_11AXUCI_ASURADA-squashfs-fullimage.img
TFTP_IMAGE_FILENAME_PATTERN: /.*AX3000_1600_ETH_11AXUCI_ASURADA-squashfs-fullimage.img/
tags:
- dut-nec-wx3000hp

View File

@@ -1,11 +1,15 @@
.turris-omnia testbed:
extends: .testbed true.cz
variables:
DUT_ARCH: mvebu
DUT_ARCH: arm
DUT_TARGET: mvebu
DUT_SUBTARGET: cortexa9
DUT_BOARD: turris-omnia
DUT_CPU_TYPE: cortex-a9
DUT_CPU_SUBTYPE: vfpv3-d16
DUT_WAN_INTERFACE: eth2
LABGRID_TARGET: turris-omnia-initramfs
TFTP_IMAGE_FILENAME: openwrt-mvebu-cortexa9-cznic_turris-omnia-initramfs-kernel.bin
TFTP_IMAGE_FILENAME_PATTERN: /.*openwrt-mvebu-cortexa9-cznic_turris-omnia-initramfs-kernel.bin/
tags:
- dut-turris-omnia

View File

@@ -332,7 +332,7 @@ SECTION "Base Configuration" {
# testvar lanMask 255.255.255.0
# testvar lanDomainName qacafe.com
# testvar lanMtu default
# testvar lanHostname mydut
testvar lanHostname prplOS
# testvar lanGuestMode no
SECTION "ARP Settings" {
@@ -679,7 +679,7 @@ SECTION "Base Configuration" {
testvar firewallTcpOpenPorts "50805"
# testvar firewallTcpClosedPorts 2323
# testvar firewallUdpOpenPorts 1234
# testvar firewallUdpClosedPorts 113
testvar firewallUdpClosedPorts 68
# testvar firewallOutBlockedTcpPorts 1234
# testvar firewallOutBlockedUdpPorts 1234
# testvar firewallOutBlockedIpProtos 0
@@ -1292,7 +1292,7 @@ SECTION "CDRouter IPv6 Add-On" {
SECTION "IPv6 LAN" {
# testvar ipv6LanMode autoconf
# testvar ipv6LanIp 3001:dddd::%eui64%
testvar ipv6LanIp 3001:dddd::1
# testvar ipv6LanPrivacyAddresses no
# testvar ipv6LanPrefixLen 64
# testvar ipv6MaxLanClients 32

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@@ -0,0 +1,63 @@
targets:
glinet-b1300-initramfs:
resources:
ModbusTCPCoil:
host: quido.testbed-02.vpn.true.cz
coil: 7
write_multiple_coils: True
RawSerialPort:
port: "/dev/glinet-b1300"
drivers:
ModbusCoilDriver: {}
DigitalOutputPowerDriver: {}
SerialDriver: {}
ShellDriver:
console_ready: Please press Enter to activate this console.
prompt: 'root@[\w()]+:[^ ]+ '
login_prompt: built-in shell (ash)
await_login_timeout: 15
username: kingbanik
UBootDriver:
prompt: '\(IPQ40xx\) # '
password: 'gl'
password_prompt: 'Hit "gl" key to stop booting'
init_commands:
- setenv bootdelay 0
- setenv serverip 192.168.1.2
- setenv ipaddr 192.168.1.1
boot_command_delay: 5
boot_timeout: 90
boot_command: tftpboot 0x88000000 openwrt-ipq40xx-generic-glinet_gl-b1300-initramfs-fit-zImage.itb && bootm 0x88000000
UBootStrategy: {}
glinet-b1300-nor:
resources:
ModbusTCPCoil:
host: quido.testbed-02.vpn.true.cz
coil: 7
write_multiple_coils: True
RawSerialPort:
port: "/dev/glinet-b1300"
drivers:
ModbusCoilDriver: {}
DigitalOutputPowerDriver: {}
SerialDriver: {}
ShellDriver:
console_ready: Please press Enter to activate this console.
prompt: 'root@[\w()]+:[^ ]+ '
login_prompt: built-in shell (ash)
await_login_timeout: 15
username: kingbanik
UBootDriver:
prompt: '\(IPQ40xx\) # '
password: 'gl'
password_prompt: 'Hit "gl" key to stop booting'
init_commands:
- setenv bootdelay 0
- setenv serverip 192.168.1.2
- setenv ipaddr 192.168.1.1
boot_command_delay: 5
boot_timeout: 180
boot_command: tftpboot 0x84000000 openwrt-ipq40xx-generic-glinet_gl-b1300-squashfs-sysupgrade.bin && sf probe && sf erase 0x180000 0x1e80000 && sf write 0x84000000 0x180000 $filesize && bootipq
UBootStrategy: {}