]>
git.proxmox.com Git - ceph.git/blob - ceph/qa/tasks/mgr/dashboard/test_erasure_code_profile.py
1 # -*- coding: utf-8 -*-
3 from __future__
import absolute_import
7 from .helper
import DashboardTestCase
, JObj
, JList
10 class ECPTest(DashboardTestCase
):
12 AUTH_ROLES
= ['pool-manager']
14 @DashboardTestCase.RunAs('test', 'test', ['rgw-manager'])
15 def test_read_access_permissions(self
):
16 self
._get
('/api/erasure_code_profile')
17 self
.assertStatus(403)
19 @DashboardTestCase.RunAs('test', 'test', ['read-only'])
20 def test_write_access_permissions(self
):
21 self
._get
('/api/erasure_code_profile')
22 self
.assertStatus(200)
23 data
= {'name': 'ecp32', 'k': 3, 'm': 2}
24 self
._post
('/api/erasure_code_profile', data
)
25 self
.assertStatus(403)
26 self
._delete
('/api/erasure_code_profile/default')
27 self
.assertStatus(403)
30 def tearDownClass(cls
):
31 super(ECPTest
, cls
).tearDownClass()
32 cls
._ceph
_cmd
(['osd', 'erasure-code-profile', 'rm', 'ecp32'])
33 cls
._ceph
_cmd
(['osd', 'erasure-code-profile', 'rm', 'lrc'])
36 data
= self
._get
('/api/erasure_code_profile')
37 self
.assertStatus(200)
39 default
= [p
for p
in data
if p
['name'] == 'default']
43 'technique': 'reed_sol_van',
48 if 'crush-failure-domain' in default
[0]:
49 default_ecp
['crush-failure-domain'] = default
[0]['crush-failure-domain']
50 self
.assertSubset(default_ecp
, default
[0])
51 get_data
= self
._get
('/api/erasure_code_profile/default')
52 self
.assertEqual(get_data
, default
[0])
55 def test_create(self
):
56 data
= {'name': 'ecp32', 'k': 3, 'm': 2}
57 self
._post
('/api/erasure_code_profile', data
)
58 self
.assertStatus(201)
60 self
._get
('/api/erasure_code_profile/ecp32')
61 self
.assertJsonSubset({
62 'crush-device-class': '',
63 'crush-failure-domain': 'osd',
64 'crush-root': 'default',
65 'jerasure-per-chunk-alignment': 'false',
70 'technique': 'reed_sol_van',
73 self
.assertStatus(200)
75 self
._delete
('/api/erasure_code_profile/ecp32')
76 self
.assertStatus(204)
78 def test_create_plugin(self
):
79 data
= {'name': 'lrc', 'k': '2', 'm': '2', 'l': '2', 'plugin': 'lrc'}
80 self
._post
('/api/erasure_code_profile', data
)
81 self
.assertJsonBody(None)
82 self
.assertStatus(201)
84 self
._get
('/api/erasure_code_profile/lrc')
86 'crush-device-class': '',
87 'crush-failure-domain': 'host',
88 'crush-root': 'default',
96 self
.assertStatus(200)
98 self
._delete
('/api/erasure_code_profile/lrc')
99 self
.assertStatus(204)
101 def test_ecp_info(self
):
102 self
._get
('/ui-api/erasure_code_profile/info')
103 self
.assertSchemaBody(JObj({
104 'names': JList(six
.string_types
),
105 'plugins': JList(six
.string_types
),
106 'directory': six
.string_types
,
107 'nodes': JList(JObj({}, allow_unknown
=True))