#
# SPDX-License-Identifier: Apache-2.0
#
# Copyright (c) 2024 Wind River Systems, Inc.
#
import unittest
from software.release_data import SWReleaseCollection
from software.software_functions import ReleaseData
metadata = """
23.09_RR_ALL_NODES
23.09
Debian patch test
Reboot required patch
Sample instructions
Sample warning
TST
Y
Y
1
0db647647b009c5cc02410d461de0870049bdeb66caf1bdc1ccd189ac83b8e92
bae3ff59c5f59c95aa8d3ccf8c1364c4c869cd428f7b5032a00a8b777cc132f7
38453dcb1aeb5bb9394ed02c0e6b8f2f913d00a827c89faf98cb63dff503b8e2
2f742b1b719f19b302c306604659ccf4aa61a1fdb7742ac79b009c79af18c79b
"""
metadata2 = """
23.09_NRR_INSVC
23.09
Debian patch test
In service patch
Sample instructions2
Sample warning2
DEV
N
N
23.09_NRR_INSVC_example-cgcs-patch-restart
1
0db647647b009c5cc02410d461de0870049bdeb66caf1bdc1ccd189ac83b8e92
bae3ff59c5f59c95aa8d3ccf8c1364c4c869cd428f7b5032a00a8b777cc132f7
0b53576092a189133d56eac49ae858c1218f480a4a859eaca2b47f2604a4e0e7
2f742b1b719f19b302c306604659ccf4aa61a1fdb7742ac79b009c79af18c79b
"""
expected_values = [
{
"release_id": "23.09_NRR_INSVC",
"version": "23.09",
"state": "deployed",
"summary": "Debian patch test",
"description": "In service patch",
"install_instructions": "Sample instructions2",
"warnings": "Sample warning2",
"status": "DEV",
"unremovable": "N",
"restart_script": "23.09_NRR_INSVC_example-cgcs-patch-restart",
"commit_id": "0b53576092a189133d56eac49ae858c1218f480a4a859eaca2b47f2604a4e0e7",
"checksum": "2f742b1b719f19b302c306604659ccf4aa61a1fdb7742ac79b009c79af18c79b",
},
{
"release_id": "23.09_RR_ALL_NODES",
"version": "23.09",
"state": "available",
"summary": "Debian patch test",
"description": "Reboot required patch",
"install_instructions": "Sample instructions",
"warnings": "Sample warning",
"status": "TST",
"unremovable": "Y",
"restart_script": None,
"commit_id": "38453dcb1aeb5bb9394ed02c0e6b8f2f913d00a827c89faf98cb63dff503b8e2",
"checksum": "2f742b1b719f19b302c306604659ccf4aa61a1fdb7742ac79b009c79af18c79b",
}
]
package_dir = {"23.09": "/var/www/page/feed/rel_23.09"}
class TestSoftwareFunction(unittest.TestCase):
def setUp(self):
pass
def tearDown(self):
pass
@property
def release_collection(self):
rd = ReleaseData()
rd.parse_metadata_string(metadata, "available")
rd2 = ReleaseData()
rd2.parse_metadata_string(metadata2, "deployed")
rd.add_release(rd2)
rc = SWReleaseCollection(rd)
return rc
def test_SWReleaseCollection_iterate_releases(self):
idx = 0
for r in self.release_collection.iterate_releases():
val = expected_values[idx]
idx += 1
self.assertEqual(val["release_id"], r.id)
self.assertEqual(val["version"], r.sw_version)
self.assertEqual(val["state"], r.state)
self.assertEqual(val["summary"], r.summary)
self.assertEqual(val["description"], r.description)
self.assertEqual(val["install_instructions"], r.install_instructions)
self.assertEqual(val["warnings"], r.warnings)
self.assertEqual(val["status"], r.status)
self.assertEqual(val["unremovable"], r.unremovable)
if val["restart_script"] is None:
self.assertIsNone(r.restart_script)
else:
self.assertEqual(val["restart_script"], r.restart_script)
self.assertEqual(val["commit_id"], r.commit_id)
self.assertEqual(val["checksum"], r.commit_checksum)
def test_SWReleaseCollection_get_release_by_id(self):
rd = ReleaseData()
rd.parse_metadata_string(metadata, "available")
rd2 = ReleaseData()
rd2.parse_metadata_string(metadata2, "deployed")
rd.add_release(rd2)
rc = SWReleaseCollection(rd)
idx = 0
rid = expected_values[idx]["release_id"]
r = rc.get_release_by_id(rid)
val = expected_values[idx]
self.assertEqual(val["release_id"], r.id)
self.assertEqual(val["version"], r.sw_version)
self.assertEqual(val["state"], r.state)
self.assertEqual(val["summary"], r.summary)
self.assertEqual(val["description"], r.description)
self.assertEqual(val["install_instructions"], r.install_instructions)
self.assertEqual(val["warnings"], r.warnings)
self.assertEqual(val["status"], r.status)
self.assertEqual(val["unremovable"], r.unremovable)
if val["restart_script"] is None:
self.assertIsNone(r.restart_script)
else:
self.assertEqual(val["restart_script"], r.restart_script)
self.assertEqual(val["commit_id"], r.commit_id)
self.assertEqual(val["checksum"], r.commit_checksum)
def test_SWReleaseCollection_iterate_release_by_state(self):
val = expected_values[0]
for r in self.release_collection.iterate_releases_by_state('deployed'):
self.assertEqual(val["release_id"], r.id)
self.assertEqual(val["version"], r.sw_version)
self.assertEqual(val["state"], r.state)
self.assertEqual(val["summary"], r.summary)
self.assertEqual(val["description"], r.description)
self.assertEqual(val["install_instructions"], r.install_instructions)
self.assertEqual(val["warnings"], r.warnings)
self.assertEqual(val["status"], r.status)
self.assertEqual(val["unremovable"], r.unremovable)
if val["restart_script"] is None:
self.assertIsNone(r.restart_script)
else:
self.assertEqual(val["restart_script"], r.restart_script)
self.assertEqual(val["commit_id"], r.commit_id)
self.assertEqual(val["checksum"], r.commit_checksum)