Fix some bugs when testing opensds ansible
[stor4nfv.git] / src / ceph / qa / tasks / create_verify_lfn_objects.py
1 """
2 Rados modle-based integration tests
3 """
4 import contextlib
5 import logging
6
7 log = logging.getLogger(__name__)
8
9 @contextlib.contextmanager
10 def task(ctx, config):
11     """
12     For each combination of namespace and name_length, create
13     <num_objects> objects with name length <name_length>
14     on entry.  On exit, verify that the objects still exist, can
15     be deleted, and then don't exist.
16
17     Usage::
18
19        create_verify_lfn_objects.py:
20          pool: <pool_name> default: 'data'
21          prefix: <prefix> default: ''
22          namespace: [<namespace>] default: ['']
23          num_objects: [<num_objects>] default: 10
24          name_length: [<name_length>] default: [400]
25     """
26     pool = config.get('pool', 'data')
27     num_objects = config.get('num_objects', 10)
28     name_length = config.get('name_length', [400])
29     namespace = config.get('namespace', [None])
30     prefix = config.get('prefix', None)
31     manager = ctx.managers['ceph']
32
33     objects = []
34     for l in name_length:
35         for ns in namespace:
36             def object_name(i):
37                 nslength = 0
38                 if namespace is not '':
39                     nslength = len(namespace)
40                 numstr = str(i)
41                 fillerlen = l - nslength - len(prefix) - len(numstr)
42                 assert fillerlen >= 0
43                 return prefix + ('a'*fillerlen) + numstr
44             objects += [(ns, object_name(i)) for i in  range(num_objects)]
45
46     for ns, name in objects:
47         err = manager.do_put(
48             pool,
49             name,
50             '/etc/resolv.conf',
51             namespace=ns)
52         log.info("err is " + str(err))
53         assert err == 0
54
55     try:
56         yield
57     finally:
58         log.info('ceph_verify_lfn_objects verifying...')
59         for ns, name in objects:
60             err = manager.do_get(
61                 pool,
62                 name,
63                 namespace=ns)
64             log.info("err is " + str(err))
65             assert err == 0
66
67         log.info('ceph_verify_lfn_objects deleting...')
68         for ns, name in objects:
69             err = manager.do_rm(
70                 pool,
71                 name,
72                 namespace=ns)
73             log.info("err is " + str(err))
74             assert err == 0
75
76         log.info('ceph_verify_lfn_objects verifying absent...')
77         for ns, name in objects:
78             err = manager.do_get(
79                 pool,
80                 name,
81                 namespace=ns)
82             log.info("err is " + str(err))
83             assert err != 0