Skip to content

Commit

Permalink
Add simple sanity tests of the Python bindings
Browse files Browse the repository at this point in the history
And include them in the CI together with pylint
and formatting checks.
  • Loading branch information
zacikpa committed Jul 23, 2024
1 parent 05093f0 commit 974751e
Show file tree
Hide file tree
Showing 2 changed files with 94 additions and 0 deletions.
48 changes: 48 additions & 0 deletions .github/workflows/python.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
name: Test Python bindings

on:
push:
branches:
- '*'
pull_request:
branches:
- '*'

jobs:
test_python:
name: Test Python bindings
runs-on: ubuntu-latest

steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: '3.12'

- name: Build and install libcpuid
run: |
sudo apt-get install autoconf libtool automake
libtoolize
autoreconf --install
./configure
make
sudo make install
sudo ldconfig
- name: Check code formatting (black)
run: |
pip install black
black --check python
- name: Install the libcpuid Python package
run: pip install ./python

- name: Perform static analysis (pylint)
run: |
pip install pylint
pylint python/src/libcpuid
- name: Run tests
run: |
pip install pytest
pytest ./python
46 changes: 46 additions & 0 deletions python/tests/sanity_test.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
"""Sanity tests for the libcpuid package."""

import os
import tempfile
import libcpuid
from libcpuid.info import CPUInfo, SystemInfo
from libcpuid.raw import CPURawData, CPURawDataArray


def test_cpu_name_in_vendor_list():
"""
Checks that the current CPU codename appears
in the list of all CPUs of its vendor.
"""
info = CPUInfo.from_current_cpu()
cpulist = libcpuid.get_cpu_list(info.vendor)
assert info.cpu_codename in cpulist


def test_serialization():
"""
Checks that CPU data serialization and
deserialization does not raise any errors.
"""
with tempfile.TemporaryDirectory() as tmpdirname:
info_file = os.path.join(tmpdirname, "info.txt")
raw = CPURawData.from_current_cpu()
raw.serialize(info_file)
info = CPUInfo.from_raw(raw)
info_from_file = CPUInfo.from_raw(CPURawData.from_file(info_file))
assert info.features == info_from_file.features


def test_array_serialization():
"""
Checks that CPU array data serialization and
deserialization does not raise any errors.
"""
with tempfile.TemporaryDirectory() as tmpdirname:
info_file = os.path.join(tmpdirname, "info.txt")
raw_array = CPURawDataArray.from_all_cpus()
raw_array.serialize(info_file)
info = SystemInfo.from_raw_array(raw_array)
info_from_file = SystemInfo.from_raw_array(CPURawDataArray.from_file(info_file))
assert len(info) == len(info_from_file)
assert info[0].features == info_from_file[0].features

0 comments on commit 974751e

Please sign in to comment.