-
Notifications
You must be signed in to change notification settings - Fork 38
Description
We have a Singleton Class called GeneralEnvInfo :
class SingletonMeta(type):
"""
This is a metaclass that ensures there's only one instance of Singleton.
"""
_instances = {}
def __call__(cls, *args, **kwargs):
if cls not in cls._instances:
instance = super().__call__(*args, **kwargs)
cls._instances[cls] = instance
return cls._instances[cls]
class GeneralEnvInfo(metaclass=SingletonMeta):
_shared_state = {}
def __new__(cls, *args, **kwargs):
obj = super(GeneralEnvInfo, cls).__new__(cls)
obj.__dict__ = cls._shared_state
cls.initialized = False
return obj
def __init__(self):
if not self.initialized:
print("Initializing GeneralEnvInfo instance")
self.home_door = False
self.available_aps = []
self.default_ssid = "SSID1"
netgear_present = True
self.provisioned_ssids = []
if not netgear_present:
self.available_aps.append(self.default_ssid)
self.connected_ssid = None
self.home_wifi = True
self.wifi_sta_mode = True
self.wifi_connected = False
self.verdict = None
self.initialized = True
print("GeneralEnvInfo instance initiated")
now we have test classes defined as below :
from .singleton2 import *
class MyState(GeneralEnvInfo):
def init(self):
super().init()
print("CarState Class Init")
self.home_door = None
self.wifi = None
def door_open(self):
self.home_door = False
def door_close(self):
self.home_door = True
def home_wifi_off(self):
self.home_wifi = False
def home_wifi_on(self):
self.home_wifi = True
class SingleFixture:
def init(self):
print("SingleFixture Class Init")
self.state = MyState()
def start_test(self):
print("SingleFixture Class Test Start")
def end_test(self):
print("Test End")
@slash.fixture
def single_test_fixture(this):
@this.add_cleanup
def scope_cleanup():
if 'single_test_env' in this.dir():
print("Start Cleaning Up single_test_fixture")
print("single_test_fixture fixture Cleaned up")
@this.test_start
def on_test_start():
"""Test Start fixture"""
print("single_test_fixture start")
this.single_test_env.start_test()
@this.test_end
def on_test_end():
"""Test End fixture """
print("single_test_fixture end")
this.single_test_env.end_test()
print("single_test_fixture start")
this.single_test_env = SingleFixture()
return this.single_test_env
class WlanClass(GeneralEnvInfo):
def init(self):
super().init()
#self.general_info = GeneralEnvInfo()
print("WlanClass Init")
class WlanTest(WlanClass):
def init(self):
super().init()
#WlanClass.init(self)
self.new_values = "Test"
self.state: MyState = None
print("WlanTest Class Init")
class TestCase(slash.Test, WlanTest):
def __init__(self, test_method_name, fixture_store, fixture_namespace, variation):
super().__init__(test_method_name, fixture_store, fixture_namespace, variation)
print("Initializing TestCase")
def before(self, single_test_fixture):
print("Before of WlanTest")
super().before()
self.home = single_test_fixture.state
self.home.door_close()
self.home.home_wifi_off()
def after(self):
print("After of WlanTest")
super().after()
def test_example1(self):
print("test_example1 start")
self.home.door_open()
self.home.home_wifi_off()
new_env = GeneralEnvInfo()
print("General info Wifi State: {0}".format(new_env.home_wifi))
print("General Info Door Status: {0}".format(new_env.home_door))
def test_second_example(self):
self.home.door_open()
self.home.home_wifi_off()
new_env = GeneralEnvInfo()
print("General info Wifi State: {0}".format(new_env.home_wifi))
print("General Info Door Status: {0}".format(new_env.home_door))
if there is only one test run , it will pass but collecting multiple tests returns error :
(FNV2-CM) c:\Git\FNV2-CM>slash run C:\Users\nettest\Local\Local\test_scripts\example_fixture.py -vvv
ldf is not supported
xls is not supported
xlsx is not supported
Initializing GeneralEnvInfo instance
GeneralEnvInfo instance initiated
WlanClass Init
WlanTest Class Init
Initializing TestCase
Session error caught -- <Error: slash.exceptions.SlashInternalError: INTERNAL ERROR:
<Runnable test <C:\Users\nettest\Local\Local\test_scripts\example_fixture.py:TestCase.test_example1>> has Metadata before generating it
Please open issue at: https://github.com/getslash/slash/issues/new>
[2024-06-21 21:32:50] Saved resume state to DB
ERROR: INTERNAL ERROR:
<Runnable test <C:\Users\nettest\Local\Local\test_scripts\example_fixture.py:TestCase.test_example1>> has Metadata before generating it
Please open issue at: https://github.com/getslash/slash/issues/new