Skip to content
Open
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
65 changes: 60 additions & 5 deletions .github/actions/run-eden-test/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -56,13 +56,68 @@ runs:
- name: Setup Environment
uses: ./eden/.github/actions/setup-environment
with:
file_system: ${{ inputs.file_system }}
tpm_enabled: ${{ inputs.tpm_enabled }}
eve_image: ${{ inputs.eve_image }}
eve_log_level: ${{ inputs.eve_log_level }}
eve_artifact_name: ${{ inputs.eve_artifact_name }}
artifact_run_id: ${{ inputs.artifact_run_id }}
require_virtualization: ${{ inputs.require_virtualization }}
- name: Configure
run: |
./eden config add default
require_virt="${{ inputs.require_virtualization }}"
if [[ "$require_virt" == "true" ]]; then
if ! lscpu | grep -oEq "vmx|svm"; then
echo "Missing required HW-assisted virtualization support"
exit 1
fi
./eden config set default --key=eve.accel --value=true
else
./eden config set default --key=eve.accel --value=false
./eden config set default --key=eve.firmware --value="$(pwd)/firmware/OVMF_CODE.fd $(pwd)/firmware/OVMF_VARS.fd"
fi
./dist/bin/eden+ports.sh 2223:2223 2224:2224 5912:5902 5911:5901 8027:8027 8028:8028 8029:8029 8030:8030 8031:8031
./eden config set default --key=eve.tpm --value=${{ inputs.tpm_enabled }}
./eden config set default --key=eve.cpu --value=2
shell: bash
working-directory: "./eden"
- name: Setup eve version
run: |
image=${{ inputs.eve_image }}
if [[ -n "$image" && "$image" == *:* ]]; then
echo "Setting up eve image ${image}"
eve_pr_registry=$(echo "$image" | cut -d ':' -f 1)
eve_pr=$(echo "$image" | cut -d ':' -f 2 | cut -d "-" -f1)
# this will be empty if there is no rc in the tag
eve_rc=$(echo "$image" | cut -d ':' -f 2 | grep -Eo "\-rc[0-9]+" || printf "")
./eden config set default --key=eve.registry --value="$eve_pr_registry"
./eden config set default --key=eve.tag --value="$eve_pr$eve_rc"
else
echo "Skipping setting up eve image ${image}"
fi
shell: bash
working-directory: "./eden"
- name: Set eve log level
run: ./eden config set default --key=eve.log-level --value=${{ inputs.eve_log_level }}
shell: bash
working-directory: "./eden"
- name: Setup ext4
if: inputs.file_system == 'ext4'
run: ./eden setup -v debug
shell: bash
working-directory: "./eden"
- name: Setup zfs
if: inputs.file_system == 'zfs'
run: |
./eden config set default --key=eve.disks --value=4
./eden config set default --key=eve.disk --value=4096
./eden setup -v debug --grub-options='set_global dom0_extra_args "$dom0_extra_args eve_install_zfs_with_raid_level "'

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would it be good to place the default raid level value here for readability?
eve_install_zfs_with_raid_level=none

shell: bash
working-directory: "./eden"

- name: Start and Onboard
run: |
./eden start -v debug
./eden eve onboard -v debug
shell: bash
working-directory: "./eden"

- name: Run tests
run: EDEN_TEST_STOP=n ./eden test ./tests/workflow -s ${{ inputs.suite }} -v debug
shell: bash
Expand Down
14 changes: 7 additions & 7 deletions .github/actions/run-neoeden-test/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -55,28 +55,28 @@ runs:
- name: Setup Environment
uses: ./eden/.github/actions/setup-environment
with:
file_system: ${{ inputs.file_system }}
tpm_enabled: ${{ inputs.tpm_enabled }}
eve_image: ${{ inputs.eve_image }}
eve_log_level: ${{ inputs.eve_log_level }}
eve_artifact_name: ${{ inputs.eve_artifact_name }}
artifact_run_id: ${{ inputs.artifact_run_id }}
require_virtualization: ${{ inputs.require_virtualization }}
- name: Run neoeden test suite
run: go test -timeout 30m
shell: bash
working-directory: ${{ inputs.test_suite }}
env:
AZIOT_ID_SCOPE: ${{ inputs.aziot_id_scope }}
AZIOT_CONNECTION_STRING: ${{ inputs.aziot_connection_string }}
run: |
go test \
-filesystem="${{ inputs.file_system }}" \
-eve-image="${{ inputs.eve_image }}" \
-eve-log-level="${{ inputs.eve_log_level }}" \
-timeout 30m
- name: Collect info
if: failure()
uses: ./eden/.github/actions/collect-info
- name: Collect logs
if: always()
uses: ./eden/.github/actions/publish-logs
with:
report_name: eden-report-${{ inputs.suite }}-tpm-${{ inputs.tpm_enabled }}-${{ inputs.file_system }}
report_name: eden-report-${{ inputs.test_suite }}-tpm-${{ inputs.tpm_enabled }}-${{ inputs.file_system }}
- name: Clean up after test
if: always()
run: |
Expand Down
79 changes: 3 additions & 76 deletions .github/actions/setup-environment/action.yml
Original file line number Diff line number Diff line change
@@ -1,31 +1,17 @@
name: 'Setup environment to run eden tests'
description: 'Setup building dependencies, build and configure eden'
description: 'Setup building dependencies'

inputs:
file_system:
required: true
type: string
tpm_enabled:
required: true
type: bool
eve_image:
type: string
eve_log_level:
type: string
required: false
default: 'info'
eve_artifact_name:
type: string
artifact_run_id:
type: string
require_virtualization:
type: bool


runs:
using: 'composite'
steps:
- name: Setup go
uses: actions/setup-go@v3
uses: actions/setup-go@v5
with:
go-version: '1.22'
- name: Check
Expand All @@ -51,25 +37,6 @@ runs:
make build-tests
shell: bash
working-directory: "./eden"
- name: Configure
run: |
./eden config add default
require_virt="${{ inputs.require_virtualization }}"
if [[ "$require_virt" == "true" ]]; then
if ! lscpu | grep -oEq "vmx|svm"; then
echo "Missing required HW-assisted virtualization support"
exit 1
fi
./eden config set default --key=eve.accel --value=true
else
./eden config set default --key=eve.accel --value=false
./eden config set default --key=eve.firmware --value="$(pwd)/firmware/OVMF_CODE.fd $(pwd)/firmware/OVMF_VARS.fd"
fi
./dist/bin/eden+ports.sh 2223:2223 2224:2224 5912:5902 5911:5901 8027:8027 8028:8028 8029:8029 8030:8030 8031:8031
./eden config set default --key=eve.tpm --value=${{ inputs.tpm_enabled }}
./eden config set default --key=eve.cpu --value=2
shell: bash
working-directory: "./eden"
- name: Download artifact if specified
if: inputs.eve_artifact_name != ''
uses: actions/download-artifact@v4
Expand All @@ -84,43 +51,3 @@ runs:
docker load -q -i artifacts/${{ inputs.eve_artifact_name }}.tar
docker image ls
shell: bash
- name: Setup eve version
run: |
image=${{ inputs.eve_image }}
if [[ -n "$image" && "$image" == *:* ]]; then
echo "Setting up eve image ${image}"
eve_pr_registry=$(echo "$image" | cut -d ':' -f 1)
eve_pr=$(echo "$image" | cut -d ':' -f 2 | cut -d "-" -f1)
# this will be empty if there is no rc in the tag
eve_rc=$(echo "$image" | cut -d ':' -f 2 | grep -Eo "\-rc[0-9]+" || printf "")
./eden config set default --key=eve.registry --value="$eve_pr_registry"
./eden config set default --key=eve.tag --value="$eve_pr$eve_rc"
else
echo "Skipping setting up eve image ${image}"
fi
shell: bash
working-directory: "./eden"
- name: Set eve log level
run: ./eden config set default --key=eve.log-level --value=${{ inputs.eve_log_level }}
shell: bash
working-directory: "./eden"
- name: Setup ext4
if: inputs.file_system == 'ext4'
run: ./eden setup -v debug
shell: bash
working-directory: "./eden"
- name: Setup zfs
if: inputs.file_system == 'zfs'
run: |
./eden config set default --key=eve.disks --value=4
./eden config set default --key=eve.disk --value=4096
./eden setup -v debug --grub-options='set_global dom0_extra_args "$dom0_extra_args eve_install_zfs_with_raid_level "'
shell: bash
working-directory: "./eden"

- name: Start and Onboard
run: |
./eden start -v debug
./eden eve onboard -v debug
shell: bash
working-directory: "./eden"
2 changes: 1 addition & 1 deletion .github/workflows/eden.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,6 @@ jobs:
uses: ./.github/workflows/test.yml
with:
eve_image: "lfedge/eve:15.8.0"
eve_kubevirt_image: "lfedge/eve:0.0.0-master-75241279-kubevirt-amd64"
eve_kubevirt_image: "lfedge/eve:0.0.0-master-75241279"
eden_version: ${{ github.event.pull_request.head.sha }}
secrets: inherit
4 changes: 2 additions & 2 deletions .github/workflows/eden_setup.yml
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ jobs:
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: setup go
uses: actions/setup-go@v3
uses: actions/setup-go@v5
with:
go-version: '1.22'
- name: Login to DockerHub (Pull)
Expand Down Expand Up @@ -56,7 +56,7 @@ jobs:
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: setup go
uses: actions/setup-go@v3
uses: actions/setup-go@v5
with:
go-version: '1.22'
- name: Login to DockerHub (Pull)
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/unit.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ jobs:
- name: get eden
uses: actions/checkout@v4.1.1
- name: setup go
uses: actions/setup-go@v3
uses: actions/setup-go@v5
with:
go-version: '1.22'
- name: run tests
Expand Down
5 changes: 3 additions & 2 deletions cmd/edenConfig.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,11 @@ func newConfigCmd(configName, verbosity *string) *cobra.Command {
if err != nil {
log.Fatal(err)
}
cfg, err := openevec.GetDefaultConfig(currentPath)
if err != nil {
builder := openevec.GetDefaultConfig(currentPath)
if len(builder.Err) > 0 {
log.Fatalf("Failed to generate default config %v\n", err)
}
cfg := builder.Args
var configCmd = &cobra.Command{
Use: "config",
Short: "work with config",
Expand Down
5 changes: 2 additions & 3 deletions cmd/edenSetup.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,6 @@ import (
func newSetupCmd(configName, verbosity *string) *cobra.Command {
cfg := &openevec.EdenSetupArgs{}
var configDir, softSerial, zedControlURL, ipxeOverride string
var grubOptions []string
var netboot, installer bool

var setupCmd = &cobra.Command{
Expand All @@ -23,7 +22,7 @@ func newSetupCmd(configName, verbosity *string) *cobra.Command {
Long: `Setup harness.`,
PersistentPreRunE: preRunViperLoadFunction(cfg, configName, verbosity),
Run: func(cmd *cobra.Command, args []string) {
if err := openEVEC.SetupEden(*configName, configDir, softSerial, zedControlURL, ipxeOverride, grubOptions, netboot, installer); err != nil {
if err := openEVEC.SetupEden(*configName, configDir, softSerial, zedControlURL, ipxeOverride, netboot, installer); err != nil {

log.Fatalf("Setup eden failed: %s", err)
}
Expand All @@ -42,7 +41,7 @@ func newSetupCmd(configName, verbosity *string) *cobra.Command {
setupCmd.Flags().StringVar(&softSerial, "soft-serial", "", "Use provided serial instead of hardware one, please use chars and numbers here")
setupCmd.Flags().StringVar(&zedControlURL, "zedcontrol", "", "Use provided zedcontrol domain instead of adam (as example: zedcloud.alpha.zededa.net)")
setupCmd.Flags().StringVar(&ipxeOverride, "ipxe-override", "", "override lines inside ipxe, please use || as delimiter")
setupCmd.Flags().StringArrayVar(&grubOptions, "grub-options", []string{}, "append lines to grub options")
setupCmd.Flags().StringArrayVar(&cfg.Eve.GrubOptions, "grub-options", []string{}, "append lines to grub options")

setupCmd.Flags().StringVarP(&cfg.Eden.CertsDir, "certs-dist", "o", cfg.Eden.CertsDir, "directory with certs")
setupCmd.Flags().StringVarP(&cfg.Adam.CertsDomain, "domain", "d", defaults.DefaultDomain, "FQDN for certificates")
Expand Down
57 changes: 57 additions & 0 deletions pkg/evetestkit/framework.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
package evetestkit

import (
"errors"
"flag"
"fmt"
"path/filepath"

"github.com/lf-edge/eden/pkg/defaults"
"github.com/lf-edge/eden/pkg/openevec"
)

// SetupTestSuite initializes the test environment for a test suite
// Call this from TestMain in each test package
func SetupTestSuite(projectName string, configPath string, opts ...openevec.ConfigOption) (*EveNode, func(), error) {
flag.Parse()

builder := openevec.GetDefaultConfig(configPath)

if len(builder.Err) > 0 {
return nil, nil, errors.Join(builder.Err...)
}

for _, opt := range opts {
opt(builder)
}

cfg := builder.Args

if err := openevec.ConfigAdd(cfg, cfg.ConfigName, "", false); err != nil {
return nil, nil, err
}

evec := openevec.CreateOpenEVEC(cfg)
configDir := filepath.Join(configPath, "eve-config-dir")
if err := evec.SetupEden("config", configDir, "", "", "", false, false); err != nil {
return nil, nil, fmt.Errorf("Failed to setup Eden: %v", err)
}
if err := evec.StartEden(defaults.DefaultVBoxVMName, "", ""); err != nil {
return nil, nil, fmt.Errorf("Start eden failed: %s", err)
}
if err := evec.OnboardEve(cfg.Eve.CertsUUID); err != nil {
return nil, nil, fmt.Errorf("Eve onboard failed: %s", err)
}

node, err := InitializeTestFromConfig(
projectName, cfg, WithControllerVerbosity("debug"))
if err != nil {
return nil, nil, fmt.Errorf("Failed to initialize test: %v", err)
}

cleanup := func() {
fmt.Printf("Cleaning up test suite: %s", projectName)
}

return node, cleanup, nil
}
31 changes: 16 additions & 15 deletions pkg/openevec/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -129,21 +129,22 @@ type EveConfig struct {
Serial string `mapstructure:"serial" cobraflag:"eve-serial"`
Accel bool `mapstructure:"accel" cobraflag:"eve-accel"`

Pid string `mapstructure:"pid" cobraflag:"eve-pid" resolvepath:""`
Log string `mapstructure:"log" cobraflag:"eve-log" resolvepath:""`
TelnetPort int `mapstructure:"telnet-port" cobraflag:"eve-telnet-port"`
Remote bool `mapstructure:"remote"`
RemoteAddr string `mapstructure:"remote-addr"`
ModelFile string `mapstructure:"devmodelfile" cobraflag:"devmodel-file"`
Cert string `mapstructure:"cert" resolvepath:""`
DeviceCert string `mapstructure:"device-cert" resolvepath:""`
Name string `mapstructure:"name"`
RemoteLogLevel string `mapstructure:"remote-log-level"`
LogLevel string `mapstructure:"log-level"`
Disks int `mapstructure:"disks"`
BootstrapFile string `mapstructure:"bootstrap-file" cobraflag:"eve-bootstrap-file"`
UsbNetConfFile string `mapstructure:"usbnetconf-file" cobraflag:"eve-usbnetconf-file"`
TPM bool `mapstructure:"tpm" cobraflag:"tpm"`
Pid string `mapstructure:"pid" cobraflag:"eve-pid" resolvepath:""`
Log string `mapstructure:"log" cobraflag:"eve-log" resolvepath:""`
TelnetPort int `mapstructure:"telnet-port" cobraflag:"eve-telnet-port"`
Remote bool `mapstructure:"remote"`
RemoteAddr string `mapstructure:"remote-addr"`
ModelFile string `mapstructure:"devmodelfile" cobraflag:"devmodel-file"`
Cert string `mapstructure:"cert" resolvepath:""`
DeviceCert string `mapstructure:"device-cert" resolvepath:""`
Name string `mapstructure:"name"`
RemoteLogLevel string `mapstructure:"remote-log-level"`
LogLevel string `mapstructure:"log-level"`
Disks int `mapstructure:"disks"`
BootstrapFile string `mapstructure:"bootstrap-file" cobraflag:"eve-bootstrap-file"`
UsbNetConfFile string `mapstructure:"usbnetconf-file" cobraflag:"eve-usbnetconf-file"`
TPM bool `mapstructure:"tpm" cobraflag:"tpm"`
GrubOptions []string `mapstructure:"grub-options" cobraflag:"grub-options"`
}

type RegistryConfig struct {
Expand Down
Loading
Loading