|
13 | 13 | import singlestoredb as s2 |
14 | 14 | from singlestoredb.management.job import Status |
15 | 15 | from singlestoredb.management.job import TargetType |
| 16 | +from singlestoredb.management.region import Region |
| 17 | +from singlestoredb.utils import NamedList |
16 | 18 |
|
17 | 19 |
|
18 | 20 | TEST_DIR = pathlib.Path(os.path.dirname(__file__)) |
@@ -1487,3 +1489,107 @@ def test_file_object(self): |
1487 | 1489 |
|
1488 | 1490 | # Cleanup |
1489 | 1491 | space.remove('obj_test_2.ipynb') |
| 1492 | + |
| 1493 | + |
| 1494 | +@pytest.mark.management |
| 1495 | +class TestRegions(unittest.TestCase): |
| 1496 | + """Test cases for region management.""" |
| 1497 | + |
| 1498 | + manager = None |
| 1499 | + |
| 1500 | + @classmethod |
| 1501 | + def setUpClass(cls): |
| 1502 | + """Set up the test environment.""" |
| 1503 | + cls.manager = s2.manage_regions() |
| 1504 | + |
| 1505 | + @classmethod |
| 1506 | + def tearDownClass(cls): |
| 1507 | + """Clean up the test environment.""" |
| 1508 | + cls.manager = None |
| 1509 | + |
| 1510 | + def test_list_regions(self): |
| 1511 | + """Test listing all regions.""" |
| 1512 | + regions = self.manager.list_regions() |
| 1513 | + |
| 1514 | + # Verify we get a NamedList |
| 1515 | + assert isinstance(regions, NamedList) |
| 1516 | + |
| 1517 | + # Verify we have at least one region |
| 1518 | + assert len(regions) > 0 |
| 1519 | + |
| 1520 | + # Verify region properties |
| 1521 | + region = regions[0] |
| 1522 | + assert isinstance(region, Region) |
| 1523 | + assert hasattr(region, 'id') |
| 1524 | + assert hasattr(region, 'name') |
| 1525 | + assert hasattr(region, 'provider') |
| 1526 | + |
| 1527 | + # Verify provider values |
| 1528 | + providers = {x.provider for x in regions} |
| 1529 | + assert 'Azure' in providers or 'GCP' in providers or 'AWS' in providers |
| 1530 | + |
| 1531 | + # Verify region can be accessed by name or ID |
| 1532 | + region_by_name = regions[region.name] |
| 1533 | + region_by_id = regions[region.id] |
| 1534 | + assert region_by_name == region_by_id |
| 1535 | + assert region_by_name.id == region.id |
| 1536 | + assert region_by_name.name == region.name |
| 1537 | + assert region_by_name.provider == region.provider |
| 1538 | + |
| 1539 | + def test_list_shared_tier_regions(self): |
| 1540 | + """Test listing shared tier regions.""" |
| 1541 | + regions = self.manager.list_shared_tier_regions() |
| 1542 | + |
| 1543 | + # Verify we get a NamedList |
| 1544 | + assert isinstance(regions, NamedList) |
| 1545 | + |
| 1546 | + # Verify region properties if we have any shared tier regions |
| 1547 | + if regions: |
| 1548 | + region = regions[0] |
| 1549 | + assert isinstance(region, Region) |
| 1550 | + assert hasattr(region, 'id') |
| 1551 | + assert hasattr(region, 'name') |
| 1552 | + assert hasattr(region, 'provider') |
| 1553 | + |
| 1554 | + # Verify provider values |
| 1555 | + providers = {x.provider for x in regions} |
| 1556 | + assert any(p in providers for p in ['Azure', 'GCP', 'AWS']) |
| 1557 | + |
| 1558 | + # Verify region can be accessed by name or ID |
| 1559 | + region_by_name = regions[region.name] |
| 1560 | + region_by_id = regions[region.id] |
| 1561 | + assert region_by_name == region_by_id |
| 1562 | + assert region_by_name.id == region.id |
| 1563 | + assert region_by_name.name == region.name |
| 1564 | + assert region_by_name.provider == region.provider |
| 1565 | + |
| 1566 | + def test_str_repr(self): |
| 1567 | + """Test string representation of regions.""" |
| 1568 | + regions = self.manager.list_regions() |
| 1569 | + if not regions: |
| 1570 | + self.skipTest('No regions available for testing') |
| 1571 | + |
| 1572 | + region = regions[0] |
| 1573 | + |
| 1574 | + # Test __str__ |
| 1575 | + s = str(region) |
| 1576 | + assert region.id in s |
| 1577 | + assert region.name in s |
| 1578 | + assert region.provider in s |
| 1579 | + |
| 1580 | + # Test __repr__ |
| 1581 | + assert repr(region) == str(region) |
| 1582 | + |
| 1583 | + def test_no_manager(self): |
| 1584 | + """Test behavior when manager is not available.""" |
| 1585 | + regions = self.manager.list_regions() |
| 1586 | + if not regions: |
| 1587 | + self.skipTest('No regions available for testing') |
| 1588 | + |
| 1589 | + region = regions[0] |
| 1590 | + region._manager = None |
| 1591 | + |
| 1592 | + # Verify from_dict class method |
| 1593 | + with self.assertRaises(s2.ManagementError) as cm: |
| 1594 | + Region.get_shared_tier_regions(None) |
| 1595 | + assert 'No workspace manager' in str(cm.exception) |
0 commit comments