import unittest
import time
from tests.integration.simulator import Simulator

class TestScalingActions(unittest.TestCase):

    def setUp(self):
        self.simulator = Simulator()
        self.simulator.start()

    def tearDown(self):
        self.simulator.stop()

    def test_scale_up(self):
        """Test that instances are added when a scale-up is triggered."""
        initial_instances = len(self.simulator.instances)
        # Simulate a high load that triggers scale-up.
        self.simulator.set_load(100)
        time.sleep(5)  # Give the simulator time to react.
        final_instances = len(self.simulator.instances)
        self.assertGreater(final_instances, initial_instances, "Scale-up failed: No new instances added.")

    def test_scale_down(self):
        """Test that instances are removed when a scale-down is triggered."""
        # First, scale up to have multiple instances
        self.simulator.set_load(100)
        time.sleep(5)
        initial_instances = len(self.simulator.instances)

        # Simulate a low load that triggers scale-down.
        self.simulator.set_load(10)
        time.sleep(5)  # Give the simulator time to react.
        final_instances = len(self.simulator.instances)
        self.assertLess(final_instances, initial_instances, "Scale-down failed: No instances removed.")

if __name__ == '__main__':
    unittest.main()
