mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-25 17:22:33 +02:00
351 lines
15 KiB
YAML
351 lines
15 KiB
YAML
# Licensed to the Apache Software Foundation (ASF) under one
|
|
# or more contributor license agreements. See the NOTICE file
|
|
# distributed with this work for additional information
|
|
# regarding copyright ownership. The ASF licenses this file
|
|
# to you under the Apache License, Version 2.0 (the
|
|
# "License"); you may not use this file except in compliance
|
|
# with the License. You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing,
|
|
# software distributed under the License is distributed on an
|
|
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
|
# KIND, either express or implied. See the License for the
|
|
# specific language governing permissions and limitations
|
|
# under the License.
|
|
|
|
name: Simulator CI
|
|
|
|
on: [push, pull_request]
|
|
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
|
|
cancel-in-progress: true
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
jobs:
|
|
build:
|
|
if: github.repository == 'apache/cloudstack'
|
|
runs-on: ubuntu-24.04
|
|
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
tests: [ "smoke/test_accounts
|
|
smoke/test_account_access
|
|
smoke/test_affinity_groups
|
|
smoke/test_affinity_groups_projects
|
|
smoke/test_annotations
|
|
smoke/test_async_job
|
|
smoke/test_attach_multiple_volumes
|
|
smoke/test_backup_recovery_dummy
|
|
smoke/test_certauthority_root
|
|
smoke/test_console_endpoint
|
|
smoke/test_create_list_domain_account_project
|
|
smoke/test_create_network
|
|
smoke/test_deploy_vgpu_enabled_vm
|
|
smoke/test_deploy_virtio_scsi_vm
|
|
smoke/test_deploy_vm_extra_config_data
|
|
smoke/test_deploy_vm_iso
|
|
smoke/test_deploy_vm_iso_uefi
|
|
smoke/test_deploy_vm_root_resize
|
|
smoke/test_deploy_vm_with_userdata
|
|
smoke/test_deploy_vms_in_parallel
|
|
smoke/test_deploy_vms_with_varied_deploymentplanners
|
|
smoke/test_restore_vm
|
|
smoke/test_diagnostics
|
|
smoke/test_direct_download
|
|
smoke/test_disk_offerings
|
|
smoke/test_disk_provisioning_types
|
|
smoke/test_domain_disk_offerings
|
|
smoke/test_domain_network_offerings
|
|
smoke/test_domain_service_offerings
|
|
smoke/test_domain_vpc_offerings",
|
|
"smoke/test_cluster_drs
|
|
smoke/test_dynamicroles
|
|
smoke/test_enable_account_settings_for_domain
|
|
smoke/test_enable_role_based_users_in_projects
|
|
smoke/test_events_resource
|
|
smoke/test_global_settings
|
|
smoke/test_guest_vlan_range
|
|
smoke/test_host_maintenance
|
|
smoke/test_hostha_kvm
|
|
smoke/test_hostha_simulator
|
|
smoke/test_internal_lb
|
|
smoke/test_ipv6_infra
|
|
smoke/test_iso
|
|
smoke/test_kubernetes_clusters
|
|
smoke/test_kubernetes_supported_versions
|
|
smoke/test_list_ids_parameter
|
|
smoke/test_loadbalance
|
|
smoke/test_login
|
|
smoke/test_2fa
|
|
smoke/test_metrics_api
|
|
smoke/test_migration
|
|
smoke/test_multipleips_per_nic
|
|
smoke/test_nested_virtualization
|
|
smoke/test_set_sourcenat
|
|
smoke/test_webhook_lifecycle
|
|
smoke/test_purge_expunged_vms
|
|
smoke/test_extension_lifecycle
|
|
smoke/test_extension_custom_action_lifecycle
|
|
smoke/test_extension_custom",
|
|
"smoke/test_network
|
|
smoke/test_network_acl
|
|
smoke/test_network_ipv6
|
|
smoke/test_network_permissions
|
|
smoke/test_nic
|
|
smoke/test_nic_adapter_type
|
|
smoke/test_non_contigiousvlan
|
|
smoke/test_object_stores
|
|
smoke/test_outofbandmanagement
|
|
smoke/test_outofbandmanagement_nestedplugin
|
|
smoke/test_over_provisioning
|
|
smoke/test_password_server
|
|
smoke/test_persistent_network
|
|
smoke/test_portable_publicip
|
|
smoke/test_portforwardingrules
|
|
smoke/test_primary_storage
|
|
smoke/test_privategw_acl
|
|
smoke/test_privategw_acl_ovs_gre
|
|
smoke/test_projects
|
|
smoke/test_public_ip_range
|
|
smoke/test_pvlan
|
|
smoke/test_regions
|
|
smoke/test_register_userdata
|
|
smoke/test_reset_configuration_settings
|
|
smoke/test_reset_vm_on_reboot
|
|
smoke/test_resource_accounting
|
|
smoke/test_resource_detail
|
|
smoke/test_global_acls",
|
|
"smoke/test_router_dhcphosts
|
|
smoke/test_router_dns
|
|
smoke/test_router_dnsservice
|
|
smoke/test_routers
|
|
smoke/test_routers_iptables_default_policy
|
|
smoke/test_routers_network_ops
|
|
smoke/test_scale_vm
|
|
smoke/test_secondary_storage
|
|
smoke/test_service_offerings
|
|
smoke/test_snapshots
|
|
smoke/test_ssvm
|
|
smoke/test_staticroles
|
|
smoke/test_templates
|
|
smoke/test_update_security_group
|
|
smoke/test_usage
|
|
smoke/test_usage_events
|
|
smoke/test_vm_deployment_planner
|
|
smoke/test_vm_strict_host_tags
|
|
smoke/test_vm_schedule
|
|
smoke/test_deploy_vgpu_enabled_vm
|
|
smoke/test_vm_life_cycle
|
|
smoke/test_vm_lifecycle_unmanage_import
|
|
smoke/test_vm_snapshot_kvm
|
|
smoke/test_vm_snapshots
|
|
smoke/test_volumes
|
|
smoke/test_vpc_ipv6
|
|
smoke/test_vpc_redundant
|
|
smoke/test_vpc_router_nics
|
|
smoke/test_vpc_vpn",
|
|
"component/find_hosts_for_migration
|
|
component/test_acl_isolatednetwork
|
|
component/test_acl_isolatednetwork_delete
|
|
component/test_acl_listsnapshot",
|
|
"component/test_acl_listvm
|
|
component/test_acl_listvolume",
|
|
"component/test_acl_sharednetwork
|
|
component/test_acl_sharednetwork_deployVM-impersonation
|
|
component/test_user_private_gateway
|
|
component/test_user_shared_network",
|
|
"component/test_affinity_groups_projects
|
|
component/test_allocation_states
|
|
component/test_assign_vm",
|
|
"component/test_concurrent_snapshots_limit
|
|
component/test_cpu_domain_limits
|
|
component/test_cpu_limits
|
|
component/test_cpu_max_limits
|
|
component/test_cpu_project_limits
|
|
component/test_deploy_vm_userdata_multi_nic
|
|
component/test_deploy_vm_lease",
|
|
"component/test_egress_fw_rules
|
|
component/test_invalid_gw_nm
|
|
component/test_ip_reservation",
|
|
"component/test_lb_secondary_ip
|
|
component/test_list_nics
|
|
component/test_list_pod
|
|
component/test_memory_limits",
|
|
"component/test_mm_domain_limits
|
|
component/test_mm_max_limits
|
|
component/test_mm_project_limits
|
|
component/test_network_offering
|
|
component/test_non_contiguous_vlan",
|
|
"component/test_persistent_networks
|
|
component/test_project_configs
|
|
component/test_project_limits
|
|
component/test_project_resources",
|
|
"component/test_project_usage
|
|
component/test_protocol_number_security_group
|
|
component/test_public_ip
|
|
component/test_resource_limits
|
|
component/test_resource_limit_tags",
|
|
"component/test_regions_accounts
|
|
component/test_routers
|
|
component/test_snapshots
|
|
component/test_stopped_vm
|
|
component/test_tags
|
|
component/test_templates
|
|
component/test_updateResourceCount
|
|
component/test_update_vm",
|
|
"component/test_volumes
|
|
component/test_vpc
|
|
component/test_vpc_distributed_routing_offering
|
|
component/test_vpc_network
|
|
component/test_vpc_offerings
|
|
component/test_vpc_routers
|
|
component/test_vpn_users
|
|
component/test_vpc_network_lbrules",
|
|
"smoke/test_list_accounts
|
|
smoke/test_list_disk_offerings
|
|
smoke/test_list_domains
|
|
smoke/test_list_hosts
|
|
smoke/test_list_service_offerings
|
|
smoke/test_list_storage_pools
|
|
smoke/test_list_volumes"]
|
|
|
|
steps:
|
|
- uses: actions/checkout@v5
|
|
with:
|
|
fetch-depth: 0
|
|
|
|
- name: Set up JDK 17
|
|
uses: actions/setup-java@v5
|
|
with:
|
|
distribution: 'temurin'
|
|
java-version: '17'
|
|
cache: 'maven'
|
|
|
|
- name: Set up Python
|
|
uses: actions/setup-python@v6
|
|
with:
|
|
python-version: '3.10'
|
|
architecture: 'x64'
|
|
|
|
- name: Install Build Dependencies
|
|
run: |
|
|
sudo apt-get update
|
|
sudo apt-get install -y git uuid-runtime genisoimage netcat-openbsd ipmitool build-essential libgcrypt20 libgpg-error-dev libgpg-error0 libopenipmi0 ipmitool libpython3-dev libssl-dev libffi-dev python3-openssl python3-dev python3-setuptools
|
|
|
|
- name: Setup IPMI Tool for CloudStack
|
|
run: |
|
|
# Create cloudstack-common directory if it doesn't exist
|
|
sudo mkdir -p /usr/share/cloudstack-common
|
|
|
|
# Copy ipmitool to cloudstack-common directory if it doesn't exist
|
|
if [ ! -f /usr/share/cloudstack-common/ipmitool ]; then
|
|
sudo cp /usr/bin/ipmitool /usr/share/cloudstack-common/ipmitool
|
|
sudo chmod 755 /usr/share/cloudstack-common/ipmitool
|
|
fi
|
|
|
|
# Create ipmitool-C3 wrapper script
|
|
sudo tee /usr/bin/ipmitool > /dev/null << 'EOF'
|
|
#!/bin/bash
|
|
/usr/share/cloudstack-common/ipmitool -C3 $@
|
|
EOF
|
|
sudo chmod 755 /usr/bin/ipmitool
|
|
|
|
- name: Install Python dependencies
|
|
run: |
|
|
python3 -m pip install --user --upgrade urllib3 lxml paramiko nose texttable ipmisim pyopenssl pycryptodome mock flask netaddr pylint pycodestyle six astroid pynose
|
|
|
|
- name: Install jacoco dependencies
|
|
run: |
|
|
wget https://github.com/jacoco/jacoco/releases/download/v0.8.10/jacoco-0.8.10.zip
|
|
unzip jacoco-0.8.10.zip -d jacoco
|
|
|
|
- name: Env details
|
|
run: |
|
|
uname -a
|
|
whoami
|
|
javac -version
|
|
mvn -v
|
|
python3 --version
|
|
free -m
|
|
nproc
|
|
git status
|
|
ipmitool -V
|
|
|
|
- name: Setup MySQL Server
|
|
run: |
|
|
# https://github.com/actions/runner-images/blob/main/images/linux/Ubuntu2004-Readme.md#mysql
|
|
sudo apt-get install -y mysql-server
|
|
sudo systemctl start mysql
|
|
sudo mysql -uroot -proot -e "ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY ''; FLUSH PRIVILEGES;"
|
|
sudo systemctl restart mysql
|
|
sudo mysql -uroot -e "SELECT VERSION();"
|
|
|
|
- name: Build with Maven
|
|
run: |
|
|
mvn -B -P developer,systemvm -Dsimulator clean install -DskipTests=true -T$(nproc)
|
|
|
|
- name: Setup Simulator Prerequisites
|
|
run: |
|
|
sudo python3 -m pip install --upgrade netaddr mysql-connector-python
|
|
python3 -m pip install --user --upgrade tools/marvin/dist/[mM]arvin-*.tar.gz
|
|
mvn -q -Pdeveloper -pl developer -Ddeploydb
|
|
mvn -q -Pdeveloper -pl developer -Ddeploydb-simulator
|
|
|
|
- name: Generate jacoco-coverage.sh
|
|
run: |
|
|
echo "java -jar jacoco/lib/jacococli.jar report jacoco-it.exec \\" > jacoco-report.sh
|
|
find . | grep "target/classes" | sed 's/\/classes\//\/classes /g' | awk '{print "--classfiles", $1, "\\"}' | sort |uniq >> jacoco-report.sh
|
|
find . | grep "src/main/java" | sed 's/\/java\//\/java /g' | awk '{print "--sourcefiles", $1, "\\"}' | sort | uniq >> jacoco-report.sh
|
|
echo "--xml jacoco-coverage.xml" >> jacoco-report.sh
|
|
|
|
- name: Start CloudStack Management Server with Simulator
|
|
run: |
|
|
export MAVEN_OPTS="-Xmx4096m -XX:MaxMetaspaceSize=800m -Djava.security.egd=file:/dev/urandom -javaagent:jacoco/lib/jacocoagent.jar=address=*,port=36320,output=tcpserver --add-opens=java.base/java.lang=ALL-UNNAMED --add-exports=java.base/sun.security.x509=ALL-UNNAMED --add-opens=java.base/jdk.internal.reflect=ALL-UNNAMED"
|
|
echo -e "\nStarting simulator"
|
|
set +e
|
|
mvn -Dsimulator -Dorg.eclipse.jetty.annotations.maxWait=120 -pl :cloud-client-ui jetty:run 2>&1 > /tmp/jetty-log || true &
|
|
while ! nc -vzw 5 localhost 8096 2>&1 > /dev/null; do grep Exception /tmp/jetty-log; sleep 10; done
|
|
set -e
|
|
echo -e "\nStarting Advanced Zone DataCenter deployment"
|
|
python3 tools/marvin/marvin/deployDataCenter.py -i setup/dev/advdualzone.cfg 2>&1 || true
|
|
|
|
- name: Run Integration Tests with Simulator
|
|
run: |
|
|
mkdir -p integration-test-results/smoke/misc
|
|
mkdir -p integration-test-results/component
|
|
set -e
|
|
TESTS="${{ matrix.tests }}"
|
|
echo "Tests in this job: $TESTS"
|
|
|
|
TESTS=($(echo $TESTS | tr -d '\n' | tr -s ' '))
|
|
for suite in "${TESTS[@]}" ; do
|
|
echo -e "Currently running test: $suite\n"
|
|
time nosetests-3.4 --with-xunit --xunit-file=integration-test-results/$suite.xml --with-marvin --marvin-config=setup/dev/advdualzone.cfg test/integration/$suite.py -s -a tags=advanced,required_hardware=false --zone=zim1 --hypervisor=simulator || true ;
|
|
done
|
|
|
|
echo -e "Stopping Simulator, integration tests run completed\n"
|
|
java -jar jacoco/lib/jacococli.jar dump --address localhost --port 36320 --destfile jacoco-it.exec
|
|
bash jacoco-report.sh
|
|
mvn -Dsimulator -pl client jetty:stop 2>&1
|
|
find /tmp//MarvinLogs -type f -exec echo -e "Printing marvin logs {} :\n" \; -exec cat {} \;
|
|
|
|
- name: Integration Tests Result
|
|
run: |
|
|
echo -e "Simulator CI Test Results: (only failures listed)\n"
|
|
python3 ./tools/marvin/xunit-reader.py integration-test-results/
|
|
|
|
- uses: codecov/codecov-action@v4
|
|
with:
|
|
files: jacoco-coverage.xml
|
|
fail_ci_if_error: true
|
|
flags: simulator-marvin-tests
|
|
verbose: true
|
|
name: codecov
|
|
token: ${{ secrets.CODECOV_TOKEN }}
|