44 lines
1.4 KiB
Python
44 lines
1.4 KiB
Python
import pytest
|
|
from src.pseudo_nkode_api import UserDBModel
|
|
from src.utils import generate_random_index_interface, disperse_interface
|
|
from src.models import EncipheredNKode
|
|
from src.user_cipher_keys import UserCipherKeys
|
|
|
|
|
|
def attribute_adjacency_graph(interface: list[list[int]]) -> dict[int, set[int]]:
|
|
graph = {}
|
|
for attr_set in interface:
|
|
for attr in attr_set:
|
|
graph[attr] = set(attr_set)
|
|
graph[attr].remove(attr)
|
|
|
|
return graph
|
|
|
|
|
|
@pytest.mark.parametrize("user", [
|
|
(
|
|
UserDBModel(
|
|
username="test",
|
|
nkode=EncipheredNKode(
|
|
code="",
|
|
mask=""
|
|
),
|
|
user_keys=UserCipherKeys.new_user_encipher_keys(
|
|
numb_of_keys=10,
|
|
attrs_per_key=7,
|
|
set_values=list(range(7))
|
|
),
|
|
user_interface=generate_random_index_interface(10, 7),
|
|
)
|
|
)
|
|
])
|
|
def test_dispersion(user):
|
|
pre_dispersion_interface = user.user_interface
|
|
post_dispersion_interface = disperse_interface(user.user_interface)
|
|
|
|
pre_dispresion_graph = attribute_adjacency_graph(pre_dispersion_interface)
|
|
post_dispersion_graph = attribute_adjacency_graph(post_dispersion_interface)
|
|
for _ in range(10000):
|
|
for attr, adj_graph in pre_dispresion_graph.items():
|
|
assert (adj_graph.isdisjoint(post_dispersion_graph[attr]))
|