github.com/yasker/longhorn-engine@v0.0.0-20160621014712-6ed6cfca0729/integration/core/test_controller.py (about) 1 import time 2 import random 3 4 import pytest 5 import cattle 6 from cattle import ApiError 7 8 9 @pytest.fixture 10 def client(request): 11 url = 'http://localhost:9501/v1/schemas' 12 c = cattle.from_env(url=url) 13 request.addfinalizer(lambda: cleanup(c)) 14 return cleanup(c) 15 16 17 def cleanup(client): 18 for r in client.list_replica(): 19 client.delete(r) 20 return client 21 22 23 @pytest.fixture 24 def random_str(): 25 return 'random-{0}-{1}'.format(random_num(), int(time.time())) 26 27 28 def random_num(): 29 return random.randint(0, 1000000) 30 31 32 def test_replica_list(client): 33 replicas = client.list_replica() 34 assert len(replicas) == 0 35 36 37 def test_replica_create(client): 38 f = 'file://' + random_str() 39 replica = client.create_replica(address=f) 40 assert replica.address == f 41 42 client.create_replica(address=f) 43 client.create_replica(address=f) 44 45 r = client.list_replica() 46 assert len(r) == 1 47 assert r[0].address == f 48 assert r[0].mode == 'WO' 49 50 f2 = 'file://' + random_str() 51 with pytest.raises(ApiError) as e: 52 client.create_replica(address=f2) 53 assert e.value.error.status == 500 54 assert e.value.error.message == 'Can only have one WO replica at a time' 55 56 r = client.update(r[0], mode='RW') 57 assert r.mode == 'RW' 58 59 replica2 = client.create_replica(address=f2) 60 assert replica2.address == f2 61 62 r = client.list_replica() 63 assert len(r) == 2 64 65 66 def test_replica_delete(client): 67 f = 'file://' + random_str() 68 r1 = client.create_replica(address=f+'1') 69 client.update(r1, mode='RW') 70 r2 = client.create_replica(address=f+'2') 71 client.update(r2, mode='RW') 72 r3 = client.create_replica(address=f+'3') 73 client.update(r3, mode='RW') 74 75 r = client.list_replica() 76 assert len(r) == 3 77 78 client.delete(r1) 79 r = client.list_replica() 80 assert len(r) == 2 81 82 client.delete(r1) 83 r = client.list_replica() 84 assert len(r) == 2 85 86 client.delete(r2) 87 r = client.list_replica() 88 assert len(r) == 1 89 90 client.delete(r3) 91 r = client.list_replica() 92 assert len(r) == 0 93 94 95 def test_replica_change(client): 96 f = 'file://' + random_str() 97 r1 = client.create_replica(address=f) 98 assert r1.mode == 'WO' 99 100 r1 = client.update(r1, mode='RW') 101 assert r1.mode == 'RW' 102 103 r1 = client.reload(r1) 104 assert r1.mode == 'RW' 105 106 107 def test_start(client): 108 vs = client.list_volume() 109 assert len(vs) == 1 110 111 v = vs[0] 112 assert v.replicaCount == 0 113 114 addresses = ['file://' + random_str(), 'file://' + random_str()] 115 v = v.start(replicas=addresses) 116 117 rs = client.list_replica() 118 assert len(rs) == 2 119 assert v.replicaCount == 2 120 121 found_addresses = [r.address for r in rs] 122 assert set(found_addresses) == set(addresses) 123 124 125 def test_shutdown(client): 126 vs = client.list_volume() 127 assert len(vs) == 1 128 v = vs[0] 129 assert v.replicaCount == 0 130 131 addresses = ['file://' + random_str(), 'file://' + random_str()] 132 v = v.start(replicas=addresses) 133 assert v.replicaCount == 2 134 135 v = v.shutdown() 136 assert v.replicaCount == 0 137 138 r = client.list_replica() 139 assert len(r) == 0