diff options
author | David Kupka <dkupka@redhat.com> | 2016-02-09 15:45:45 +0100 |
---|---|---|
committer | Martin Basti <mbasti@redhat.com> | 2016-02-12 16:57:19 +0100 |
commit | 8f6e9113e954e29ed75311d8ee392bd5138209dd (patch) | |
tree | a54e15e7f0e0ebe560d4846f7ab6940aeb2a3c58 | |
parent | 0ea7433d09e24904a06d6ed02c9a89b1ea4bbc43 (diff) | |
download | freeipa-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>
-rw-r--r-- | ipatests/test_integration/tasks.py | 57 |
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): |