summaryrefslogtreecommitdiffstats
path: root/ipatests/test_integration
diff options
context:
space:
mode:
authorDavid Kupka <dkupka@redhat.com>2016-02-09 15:45:45 +0100
committerMartin Basti <mbasti@redhat.com>2016-02-12 16:57:19 +0100
commit8f6e9113e954e29ed75311d8ee392bd5138209dd (patch)
treea54e15e7f0e0ebe560d4846f7ab6940aeb2a3c58 /ipatests/test_integration
parent0ea7433d09e24904a06d6ed02c9a89b1ea4bbc43 (diff)
downloadfreeipa-8f6e9113e954e29ed75311d8ee392bd5138209dd.tar.gz
freeipa-8f6e9113e954e29ed75311d8ee392bd5138209dd.tar.xz
freeipa-8f6e9113e954e29ed75311d8ee392bd5138209dd.zip
CI: Add '2-connected' topology generator.
If number of servers (master+replicas) is equal to 4 + SUM(1, n, 2^n*5) for any n >= 0: * every server has replication agreement with 2 - 4 other servers. * at least two agreements must fail in order to disconnect the topology. Otherwise there can be server(s) with single agreement on the edge of the topology. Reviewed-By: Milan Kubik <mkubik@redhat.com>
Diffstat (limited to 'ipatests/test_integration')
-rw-r--r--ipatests/test_integration/tasks.py57
1 files changed, 57 insertions, 0 deletions
diff --git a/ipatests/test_integration/tasks.py b/ipatests/test_integration/tasks.py
index 85f669af6..d37b616bd 100644
--- a/ipatests/test_integration/tasks.py
+++ b/ipatests/test_integration/tasks.py
@@ -857,6 +857,63 @@ def tree2_topo(master, replicas):
yield master, replica
master = replica
+@_topo('2-connected')
+def two_connected_topo(master, replicas):
+ r"""No replica has more than 4 agreements and at least two
+ replicas must fail to disconnect the topology.
+
+ . . . .
+ . . . .
+ . . . .
+ ... R --- R R --- R ...
+ \ / \ / \ /
+ \ / \ / \ /
+ ... R R R ...
+ \ / \ /
+ \ / \ /
+ M0 -- R2
+ | |
+ | |
+ R1 -- R3
+ . \ / .
+ . \ / .
+ . R .
+ . .
+ . .
+ . .
+ """
+ grow = []
+ pool = [master] + replicas
+
+ try:
+ v0 = pool.pop(0)
+ v1 = pool.pop(0)
+ yield v0, v1
+
+ v2 = pool.pop(0)
+ yield v0, v2
+ grow.append((v0,v2))
+
+ v3 = pool.pop(0)
+ yield v2, v3
+ yield v1, v3
+ grow.append((v1,v3))
+
+ for (r,s) in grow:
+ t = pool.pop(0)
+
+ for (u,v) in [(r,t), (s,t)]:
+ yield u, v
+ w = pool.pop(0)
+ yield u, w
+ x = pool.pop(0)
+ yield v, x
+ yield w, x
+ grow.append((w,x))
+
+ except IndexError:
+ return
+
def install_topo(topo, master, replicas, clients,
skip_master=False, setup_replica_cas=True):