Skip to content

Commit fb7ceae

Browse files
committed
test(WIP): Use SQLalchemy's ORM features for db independant tests
1 parent 92aebbc commit fb7ceae

File tree

4 files changed

+190
-198
lines changed

4 files changed

+190
-198
lines changed

tools/integration_tests/test_support.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -544,7 +544,7 @@ def _parse_settings(cls, settings):
544544
secrets["secrets"] = settings.pop("secret")
545545
for name in settings.keys():
546546
if name.startswith(secrets_prefix):
547-
secrets[name[len(secrets_prefix):]] = settings.pop(name)
547+
secrets[name[len(secrets_prefix) :]] = settings.pop(name)
548548
kwds["secrets"] = secrets
549549
return kwds
550550

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
from sqlalchemy import Integer, String, Null, BigInteger, Index
2+
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column
3+
4+
5+
class Base(DeclarativeBase):
6+
pass
7+
8+
9+
class Services(Base):
10+
__tablename__ = "services"
11+
12+
id: Mapped[int] = mapped_column(Integer, primary_key=True)
13+
service: Mapped[str] = mapped_column(String(30), default=Null)
14+
pattern: Mapped[str] = mapped_column(String(128), default=Null)
15+
16+
def __repr__(self) -> str:
17+
return f"Services(id={self.id!r}, service={self.service!r}, pattern={self.pattern!r})"
18+
19+
def _asdict(self):
20+
return {
21+
"id": self.id,
22+
"service": self.service,
23+
"pattern": self.pattern,
24+
}
25+
26+
27+
class Nodes(Base):
28+
__tablename__ = "nodes"
29+
30+
id: Mapped[int] = mapped_column(Integer, primary_key=True)
31+
service: Mapped[int] = mapped_column(Integer, nullable=False)
32+
node: Mapped[str] = mapped_column(String(64), nullable=False)
33+
available: Mapped[int] = mapped_column(Integer, nullable=False)
34+
current_load: Mapped[int] = mapped_column(Integer, nullable=False)
35+
capacity: Mapped[int] = mapped_column(Integer, nullable=False)
36+
downed: Mapped[int] = mapped_column(Integer, nullable=False)
37+
backoff: Mapped[int] = mapped_column(Integer, nullable=False)
38+
39+
unique_idx = Index(service, node)
40+
41+
def __repr__(self) -> str:
42+
return f"Nodes(id={self.id!r}, service={self.service!r}, node={self.node!r}, available={self.available!r}, current_load={self.current_load!r}, capacity={self.capacity!r}, downed={self.downed!r}, backoff={self.backoff!r})"
43+
44+
def _asdict(self):
45+
return {
46+
"id": self.id,
47+
"service": self.service,
48+
"node": self.node,
49+
"available": self.available,
50+
"current_load": self.current_load,
51+
"capacity": self.capacity,
52+
"downed": self.downed,
53+
"backoff": self.backoff,
54+
}
55+
56+
57+
class Users(Base):
58+
__tablename__ = "users"
59+
60+
uid: Mapped[int] = mapped_column(Integer, primary_key=True)
61+
service: Mapped[int] = mapped_column(Integer, nullable=False)
62+
email: Mapped[str] = mapped_column(String(255), nullable=False)
63+
generation: Mapped[int] = mapped_column(BigInteger, nullable=False)
64+
client_state: Mapped[str] = mapped_column(String(32), nullable=False)
65+
created_at: Mapped[int] = mapped_column(BigInteger, nullable=False)
66+
replaced_at: Mapped[int] = mapped_column(BigInteger, default=Null)
67+
nodeid: Mapped[int] = mapped_column(BigInteger, nullable=False)
68+
keys_changed_at: Mapped[int] = mapped_column(BigInteger, default=Null)
69+
70+
lookup_idx = Index(email, service, created_at)
71+
replaced_at_idx = Index(service, replaced_at)
72+
node_idx = Index(nodeid)
73+
74+
def __repr__(self) -> str:
75+
return f"Users(uid={self.uid!r}, service={self.service!r}, email={self.email!r}, generation={self.generation!r}, client_state={self.client_state!r}, created_at={self.created_at!r}, replaced_at={self.replaced_at!r}, nodeid={self.nodeid!r}, keys_changed_at={self.keys_changed_at!r})"
76+
77+
def _asdict(self):
78+
return {
79+
"uid": self.uid,
80+
"service": self.service,
81+
"email": self.email,
82+
"generation": self.generation,
83+
"client_state": self.client_state,
84+
"created_at": self.created_at,
85+
"replaced_at": self.replaced_at,
86+
"nodeid": self.nodeid,
87+
"keys_changed_at": self.keys_changed_at,
88+
}

tools/integration_tests/tokenserver/test_node_assignment.py

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,7 @@ def test_user_creation(self):
4646

4747
def test_new_user_allocation(self):
4848
# Start with a clean database
49-
cursor = self._execute_sql("DELETE FROM nodes", ())
50-
cursor.close()
51-
self.database.commit()
49+
self._clear_nodes()
5250

5351
self._add_node(
5452
available=100,
@@ -90,9 +88,7 @@ def test_new_user_allocation(self):
9088

9189
def test_successfully_releasing_node_capacity(self):
9290
# Start with a clean database
93-
cursor = self._execute_sql("DELETE FROM nodes", ())
94-
cursor.close()
95-
self.database.commit()
91+
self._clear_nodes()
9692

9793
node_id1 = self._add_node(
9894
available=0, current_load=99, capacity=100, node="https://node1"
@@ -147,9 +143,7 @@ def test_successfully_releasing_node_capacity(self):
147143

148144
def test_unsuccessfully_releasing_node_capacity(self):
149145
# Start with a clean database
150-
cursor = self._execute_sql("DELETE FROM nodes", ())
151-
cursor.close()
152-
self.database.commit()
146+
self._clear_nodes()
153147

154148
self._add_node(
155149
available=0, current_load=100, capacity=100, node="https://node1"

0 commit comments

Comments
 (0)