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