Module olivia.tests.test_networkmetrics
Expand source code
import networkx as nx
import pytest
from olivia.model import OliviaNetwork
from olivia.networkmetrics import failure_vulnerability, attack_vulnerability
from olivia.packagemetrics import Impact
G = nx.DiGraph()
G.add_edges_from((['a', 'b'],
['b', 'c'],
['c', 'd'],
['d', 'e'],
['e', 'b'],
['d', 'f'],
['f', 'g'],
['g', 'j'],
['f', 'i'],
['f', 'h'],
['i', 'h'],
['h', 'i'],
['i', 'j'],
['h', 'k'],
['j', 'k'],
['k', 'j'],
['a', 'l']))
net = OliviaNetwork()
net.build_model(G)
def test_failure_vulnerability():
assert pytest.approx(failure_vulnerability(net), 37 / 6)
assert pytest.approx(failure_vulnerability(net, normalize=True), 37 / (6 * 12))
assert pytest.approx(failure_vulnerability(net, metric=Impact), 53 / 6)
assert pytest.approx(failure_vulnerability(net, metric=Impact, normalize=True), 53 / (6 * 17))
def test_attack_vulnerability():
assert attack_vulnerability(net) == 12
assert attack_vulnerability(net, normalize=True) == 12 / 12
assert attack_vulnerability(net, metric=Impact) == 17
assert attack_vulnerability(net, metric=Impact, normalize=True) == 17 / 17
Functions
def test_attack_vulnerability()
-
Expand source code
def test_attack_vulnerability(): assert attack_vulnerability(net) == 12 assert attack_vulnerability(net, normalize=True) == 12 / 12 assert attack_vulnerability(net, metric=Impact) == 17 assert attack_vulnerability(net, metric=Impact, normalize=True) == 17 / 17
def test_failure_vulnerability()
-
Expand source code
def test_failure_vulnerability(): assert pytest.approx(failure_vulnerability(net), 37 / 6) assert pytest.approx(failure_vulnerability(net, normalize=True), 37 / (6 * 12)) assert pytest.approx(failure_vulnerability(net, metric=Impact), 53 / 6) assert pytest.approx(failure_vulnerability(net, metric=Impact, normalize=True), 53 / (6 * 17))