Skip to content

Commit

Permalink
Run Windows installation tests
Browse files Browse the repository at this point in the history
Signed-off-by: Vitalii Koshura <lestat.de.lionkur@gmail.com>
  • Loading branch information
AenBleidd committed Nov 27, 2024
1 parent d23edc0 commit 1e5a99b
Show file tree
Hide file tree
Showing 6 changed files with 108 additions and 23 deletions.
8 changes: 4 additions & 4 deletions .github/workflows/linux-package.yml
Original file line number Diff line number Diff line change
Expand Up @@ -668,7 +668,7 @@ jobs:
- name: Run integration tests
if: success()
run: |
python3 ./tests/linux_package_tests/integration_tests.py
python3 ./tests/linux_package_integration_tests.py
test-ubuntu-deb-package:
name: Test Ubuntu DEB Package
Expand Down Expand Up @@ -752,7 +752,7 @@ jobs:
- name: Run integration tests
if: success()
run: |
python3 ./tests/linux_package_tests/integration_tests.py
python3 ./tests/linux_package_integration_tests.py
test-fedora-rpm-package:
name: Test Fedora RPM Package
Expand Down Expand Up @@ -825,7 +825,7 @@ jobs:
- name: Run integration tests
if: success()
run: |
python3 ./tests/linux_package_tests/integration_tests.py
python3 ./tests/linux_package_integration_tests.py
test-opensuse-rpm-package:
name: Test openSUSE RPM Package
Expand Down Expand Up @@ -893,7 +893,7 @@ jobs:
- name: Run integration tests
if: success()
run: |
python3 ./tests/linux_package_tests/integration_tests.py
python3 ./tests/linux_package_integration_tests.py
publish-deb-package:
name: Publish DEB Package
Expand Down
11 changes: 10 additions & 1 deletion .github/workflows/windows.yml
Original file line number Diff line number Diff line change
Expand Up @@ -96,11 +96,20 @@ jobs:
if: success() && matrix.type == 'libs-cmake'
run: windows\ci_build_libs_cmake.bat ${{matrix.platform}} ${{matrix.configuration}}

- name: Run tests
- name: Run unit tests
if: success() && matrix.platform == 'x64' && matrix.type == 'msbuild'
working-directory: win_build\Build\${{matrix.platform}}\${{matrix.configuration}}
run: ${{github.workspace}}\temp\OpenCppCoverage\OpenCppCoverage-x64\OpenCppCoverage.exe --cover_children --optimized_build --sources ${{github.workspace}} --export_type=cobertura:cobertura.xml -- unittests.exe --gtest_output=xml:gtest.xml

- name: Run installation
if: success() && matrix.platform == 'x64' && matrix.type == 'msbuild'
shell: powershell
run: Start-Process "msiexec.exe" -ArgumentList "/i ${{github.workspace}}\win_build\Build\x64\${{matrix.configuration}}\boinc.msi /quiet /qn /l*v ${{github.workspace}}\win_build\Build\x64\${{matrix.configuration}}\install.log" -Wait

- name: Run installation tests
if: success() && matrix.platform == 'x64' && matrix.type == 'msbuild'
run: python ./tests/windows_installer_integration_tests.py

- name: Prepare logs on failure
if: ${{failure()}}
run: |
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,12 +17,13 @@

import os
import pathlib
import re
import sys
import testset
import testhelper

class IntegrationTests:
def __init__(self):
self.testhelper = testhelper.TestHelper()
self.result = True
self.result &= self.test_files_exist()
self.result &= self.test_version()
Expand All @@ -37,23 +38,8 @@ def _get_test_executable_file_path(self, filename):
return os.path.join(p, filename)
return ""

def _get_current_version_number(self):
with open("version.h", "r") as f:
lines = f.readlines()
for line in lines:
res = re.search("#define BOINC_VERSION_STRING \"([\d]+.[\d]+.[\d]+)\"", line)
if res is not None:
return res[1]
return ""

def _get_version_from_string(self, string):
res = re.search("([\d]+.[\d]+.[\d]+)", string)
if res is not None:
return res[1]
return ""

def _get_file_version(self, filename):
return self._get_version_from_string(os.popen(("{app} --version").format(app=self._get_test_executable_file_path(filename))).read().strip())
return self.testhelper.get_version_from_string(os.popen(("{app} --version").format(app=self._get_test_executable_file_path(filename))).read().strip())

def _get_user_exists(self, username):
return os.popen("id -un {username}".format(username=username)).read().strip() == username
Expand Down Expand Up @@ -142,7 +128,7 @@ def test_files_exist(self):

def test_version(self):
ts = testset.TestSet("Test version is correct")
current_version = self._get_current_version_number()
current_version = self.testhelper.get_current_version_number()
ts.expect_not_equal("", current_version, "Test current version could be read from the 'version.h' file")
ts.expect_equal(current_version, self._get_file_version("boinc"), "Test 'boinc' version is correctly set")
ts.expect_equal(current_version, self._get_file_version("boinccmd"), "Test 'boinccmd' version is correctly set")
Expand Down
34 changes: 34 additions & 0 deletions tests/testhelper.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
# This file is part of BOINC.
# https://boinc.berkeley.edu
# Copyright (C) 2024 University of California
#
# BOINC is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License
# as published by the Free Software Foundation,
# either version 3 of the License, or (at your option) any later version.
#
# BOINC is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with BOINC. If not, see <http://www.gnu.org/licenses/>.

import re

class TestHelper:
def get_current_version_number(self):
with open("version.h", "r") as f:
lines = f.readlines()
for line in lines:
res = re.search("#define BOINC_VERSION_STRING \"([\d]+.[\d]+.[\d]+)\"", line)
if res is not None:
return res[1]
return ""

def get_version_from_string(self, string):
res = re.search("([\d]+.[\d]+.[\d]+)", string)
if res is not None:
return res[1]
return ""
File renamed without changes.
56 changes: 56 additions & 0 deletions tests/windows_installer_integration_tests.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
# This file is part of BOINC.
# https://boinc.berkeley.edu
# Copyright (C) 2024 University of California
#
# BOINC is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License
# as published by the Free Software Foundation,
# either version 3 of the License, or (at your option) any later version.
#
# BOINC is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with BOINC. If not, see <http://www.gnu.org/licenses/>.

import os
import testset as testset
import testhelper as testhelper

class IntegrationTests:
def __init__(self):
self.testhelper = testhelper.TestHelper()
self.result = True
self.result &= self.test_version()
self.result &= self.test_files_exist()

def _get_test_executable_file_path(self, filename):
return os.path.join("C:\\Program\ Files\\BOINC", filename)

def _get_file_version(self, filename):
return self.testhelper.get_version_from_string(os.popen(("{app} --version").format(app=self._get_test_executable_file_path(filename))).read().strip())

def test_version(self):
ts = testset.TestSet("Test version is correct")
current_version = self.testhelper.get_current_version_number()
ts.expect_not_equal("", current_version, "Test current version could be read from the 'version.h' file")
ts.expect_equal(current_version, self._get_file_version("boinc.exe"), "Test 'boinc.exe' version is correctly set")
ts.expect_equal(current_version, self._get_file_version("boinccmd.exe"), "Test 'boinccmd.exe' version is correctly set")
return ts.result()

def test_files_exist(self):
ts = testset.TestSet("Test files exist")
ts.expect_equal("C:\\Program\ Files\\BOINC\\boinc.exe", self._get_test_executable_file_path("boinc.exe"), "Test 'boinc.exe' file location")
ts.expect_equal("C:\\Program\ Files\\BOINC\\boinccmd.exe", self._get_test_executable_file_path("boinccmd.exe"), "Test 'boinccmd.exe' file location")
ts.expect_equal("C:\\Program\ Files\\BOINC\\boincmgr.exe", self._get_test_executable_file_path("boincmgr.exe"), "Test 'boincmgr.exe' file location")
ts.expect_equal("C:\\Program\ Files\\BOINC\\boincscr.exe", self._get_test_executable_file_path("boincscr.exe"), "Test 'boincscr.exe' file location")
ts.expect_equal("C:\\Program\ Files\\BOINC\\boincsvcctrl.exe", self._get_test_executable_file_path("boincsvcctrl.exe"), "Test 'boincsvcctrl.exe' file location")
ts.expect_equal("C:\\Program\ Files\\BOINC\\boinctray.exe", self._get_test_executable_file_path("boinctray.exe"), "Test 'boinctray.exe' file location")
ts.expect_true(os.path.exists("C:\\ProgramData\\BOINC\\all_projects_list.xml"), "Test 'all_projects_list.xml' file exists in 'C:\\ProgramData\\BOINC\\'")

if __name__ == "__main__":
if not IntegrationTests().result:
sys.exit(1)
sys.exit(0)

0 comments on commit 1e5a99b

Please sign in to comment.