Statistics
| Branch: | Tag: | Revision:

root / snf-tools / synnefo_tools / burnin / projects_tests.py @ 411cbbf4

History | View | Annotate | Download (4.2 kB)

1
# Copyright 2014 GRNET S.A. All rights reserved.
2
#
3
# Redistribution and use in source and binary forms, with or
4
# without modification, are permitted provided that the following
5
# conditions are met:
6
#
7
#   1. Redistributions of source code must retain the above
8
#      copyright notice, this list of conditions and the following
9
#      disclaimer.
10
#
11
#   2. Redistributions in binary form must reproduce the above
12
#      copyright notice, this list of conditions and the following
13
#      disclaimer in the documentation and/or other materials
14
#      provided with the distribution.
15
#
16
# THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS
17
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19
# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR
20
# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
23
# USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
24
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
26
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
27
# POSSIBILITY OF SUCH DAMAGE.
28
#
29
# The views and conclusions contained in the software and
30
# documentation are those of the authors and should not be
31
# interpreted as representing official policies, either expressed
32
# or implied, of GRNET S.A.
33

    
34
"""
35
This is the burnin class that tests the Projects functionality
36

37
"""
38

    
39
import random
40

    
41
from synnefo_tools.burnin.common import Proper
42
from synnefo_tools.burnin.cyclades_common import CycladesTests, \
43
    QADD, QREMOVE, MB, GB, QDISK, QVM, QRAM, QCPU
44

    
45

    
46
# pylint: disable=too-many-public-methods
47
class QuotasTestSuite(CycladesTests):
48
    """Test Quotas functionality"""
49
    server = Proper(value=None)
50

    
51
    def test_001_check_skip(self):
52
        """Check if we are members in more than one projects"""
53
        self._skip_suite_if(len(self.quotas.keys()) < 2,
54
                            "This user is not a member of 2 or more projects")
55

    
56
    def test_002_create(self):
57
        """Create a machine to a different project than base"""
58
        image = random.choice(self._parse_images())
59
        flavors = self._parse_flavors()
60

    
61
        # We want to create our machine in a project other than 'base'
62
        projects = self.quotas.keys()
63
        projects.remove(self._get_uuid())
64
        (flavor, project) = self._find_project(flavors, projects)
65

    
66
        # Create machine
67
        self.server = self._create_server(image, flavor, network=True,
68
                                          project_id=project)
69

    
70
        # Wait for server to become active
71
        self._insist_on_server_transition(
72
            self.server, ["BUILD"], "ACTIVE")
73

    
74
    def test_003_assign(self):
75
        """Re-Assign the machine to a different project"""
76
        # We will use the base project for now
77
        new_project = self._get_uuid()
78
        project_name = self._get_project_name(new_project)
79
        self.info("Assign %s to project %s", self.server['name'], project_name)
80

    
81
        # Reassign server
82
        old_project = self.server['tenant_id']
83
        self.clients.cyclades.reassign_server(self.server['id'], new_project)
84

    
85
        # Check tenant_id
86
        self.server = self._get_server_details(self.server, quiet=True)
87
        self.assertEqual(self.server['tenant_id'], new_project)
88

    
89
        # Check new quotas
90
        flavor = self.clients.compute.get_flavor_details(
91
            self.server['flavor']['id'])
92
        changes = \
93
            {old_project:
94
                [(QDISK, QREMOVE, flavor['disk'], GB),
95
                 (QVM, QREMOVE, 1, None),
96
                 (QRAM, QREMOVE, flavor['ram'], MB),
97
                 (QCPU, QREMOVE, flavor['vcpus'], None)],
98
             new_project:
99
                [(QDISK, QADD, flavor['disk'], GB),
100
                 (QVM, QADD, 1, None),
101
                 (QRAM, QADD, flavor['ram'], MB),
102
                 (QCPU, QADD, flavor['vcpus'], None)]}
103
        self._check_quotas(changes)
104

    
105
    def test_004_cleanup(self):
106
        """Remove test server"""
107
        self._delete_servers([self.server])