#!/usr/bin/env python3 # # Copyright (C) Advanced Micro Devices. All rights reserved. # # Permission is hereby granted, free of charge, to any person obtaining a copy of # this software and associated documentation files (the "Software"), to deal in # the Software without restriction, including without limitation the rights to # use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of # the Software, and to permit persons to whom the Software is furnished to do so, # subject to the following conditions: # # The above copyright notice and this permission notice shall be included in all # copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS # FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR # COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER # IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. """CLI leaf test: static command (incl. mem-carveout / node GTT display).""" import json from cli.base import TestCliBase class TestStatic(TestCliBase): def test_command(self): self.common.print_func_name("") msg = f"{self.tab}### amd-smi static" self.common.print(msg) cmds = self.CreateCmds( "static", "Static Arguments:", "Device Arguments:", "Command Modifiers:", "" ) self.RunCmds(cmds) return def test_mem_carveout_gtt(self): """Test static --mem-carveout and node --gtt flags (display mode only)""" self.common.print_func_name("") msg = f"{self.tab}### amd-smi static --mem-carveout and node --gtt" self.common.print(msg) # Test mem-carveout display (static subcommand) cmd = "amd-smi static --mem-carveout" (rc, data, std_err) = self.util.RunCmdSync(cmd) self.assertEqual(rc, self.PASS, f"Command '{cmd}' failed with rc={rc}") # Test GTT display (node subcommand — GTT is system-wide, not per-GPU) cmd = "amd-smi node --gtt" (rc, data, std_err) = self.util.RunCmdSync(cmd) self.assertEqual(rc, self.PASS, f"Command '{cmd}' failed with rc={rc}") # Test mem-carveout with JSON output cmd = "amd-smi static --mem-carveout --json" (rc, data, std_err) = self.util.RunCmdSync(cmd) self.assertEqual(rc, self.PASS, f"Command '{cmd}' failed with rc={rc}") if data: try: json_data = json.loads(data) self.assertIsInstance(json_data, (list, dict)) except json.JSONDecodeError: self.fail(f"Invalid JSON output for command '{cmd}'") # Test GTT with JSON output (node subcommand) cmd = "amd-smi node --gtt --json" (rc, data, std_err) = self.util.RunCmdSync(cmd) self.assertEqual(rc, self.PASS, f"Command '{cmd}' failed with rc={rc}") if data: try: json_data = json.loads(data) self.assertIsInstance(json_data, (list, dict)) except json.JSONDecodeError: self.fail(f"Invalid JSON output for command '{cmd}'") # Test mem-carveout with CSV output cmd = "amd-smi static --mem-carveout --csv" (rc, data, std_err) = self.util.RunCmdSync(cmd) self.assertEqual(rc, self.PASS, f"Command '{cmd}' failed with rc={rc}") # Test GTT with CSV output (node subcommand) cmd = "amd-smi node --gtt --csv" (rc, data, std_err) = self.util.RunCmdSync(cmd) self.assertEqual(rc, self.PASS, f"Command '{cmd}' failed with rc={rc}") # Note: We do NOT test set/reset operations (--mem-carveout in set, --gtt in set/reset) because: # 1. They require root/sudo permissions # 2. They require system reboot to take effect # 3. They could interfere with the test system configuration # These operations should be tested manually or in dedicated integration test environments msg = f"{self.tab}Static mem-carveout and node GTT tests passed (display mode only)" self.common.print(msg) return