Statistics
| Branch: | Tag: | Revision:

root / snf-cyclades-app / synnefo / db / models_factory.py @ 9ca32eaa

History | View | Annotate | Download (6.5 kB)

1
# Copyright 2012 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
import factory
35
from synnefo.db import models
36

    
37

    
38
def prefix_seq(x):
39
    return lambda n: x + '-{0}'.format(n)
40

    
41

    
42
def user_seq():
43
    return lambda n: 'user-{0}.example.com'.format(n)
44

    
45

    
46
def round_seq(x):
47
    size = len(x)
48
    return lambda n: x[int(n) % size]
49

    
50

    
51
def round_seq_first(x):
52
    size = len(x)
53
    return lambda n: x[int(n) % size][0]
54

    
55

    
56
class FlavorFactory(factory.DjangoModelFactory):
57
    FACTORY_FOR = models.Flavor
58

    
59
    cpu = factory.Sequence(lambda n: n + 2, type=int)
60
    ram = factory.Sequence(lambda n: n * 512, type=int)
61
    disk = factory.Sequence(lambda n: n * 10, type=int)
62
    disk_template = 'drbd'
63
    deleted = False
64

    
65

    
66
class BackendFactory(factory.DjangoModelFactory):
67
    FACTORY_FOR = models.Backend
68

    
69
    clustername = factory.Sequence(prefix_seq('cluster'))
70
    port = 5080
71
    username = factory.Sequence(prefix_seq('username'))
72
    password = factory.Sequence(prefix_seq('password'))
73
    drained = False
74
    offline = False
75

    
76
    mfree = 8192
77
    mtotal = 16384
78
    dfree = 132423
79
    dtotal = 14921932
80
    pinst_cnt = 2
81
    ctotal = 80
82

    
83

    
84
class DrainedBackend(BackendFactory):
85
    drained = True
86

    
87

    
88
class OfflineBackend(BackendFactory):
89
    offline = True
90

    
91

    
92
class VirtualMachineFactory(factory.DjangoModelFactory):
93
    FACTORY_FOR = models.VirtualMachine
94

    
95
    name = factory.Sequence(prefix_seq('vm'))
96
    userid = factory.Sequence(user_seq())
97
    backend = factory.SubFactory(BackendFactory)
98
    imageid = '78491238479120243171243'
99
    flavor = factory.SubFactory(FlavorFactory)
100
    deleted = False
101
    suspended = False
102
    operstate = factory.Sequence(round_seq_first(FACTORY_FOR.OPER_STATES))
103

    
104

    
105
class DeletedVirtualMachine(VirtualMachineFactory):
106
    deleted = True
107

    
108

    
109
class ErrorVirtualMachine(VirtualMachineFactory):
110
    operstate = "ERROR"
111

    
112

    
113
class BuildVirtualMachine(VirtualMachineFactory):
114
    operstate = "BUILD"
115

    
116

    
117
class DestroyedVirtualMachine(VirtualMachineFactory):
118
    operstate = "DESTROYED"
119

    
120

    
121
class StartedVirtualMachine(VirtualMachineFactory):
122
    operstate = "STARTED"
123

    
124

    
125
class StopedVirtualMachine(VirtualMachineFactory):
126
    operstate = "STOPED"
127

    
128

    
129
class VirtualMachineMetadataFactory(factory.DjangoModelFactory):
130
    FACTORY_FOR = models.VirtualMachineMetadata
131

    
132
    meta_key = factory.Sequence(prefix_seq('key'))
133
    meta_value = factory.Sequence(prefix_seq('pass'))
134
    vm = factory.SubFactory(VirtualMachineFactory)
135

    
136

    
137
class NetworkFactory(factory.DjangoModelFactory):
138
    FACTORY_FOR = models.Network
139

    
140
    name = factory.Sequence(prefix_seq('network'))
141
    userid = factory.Sequence(user_seq())
142
    subnet = factory.Sequence(lambda n: '192.168.{0}.0/24'.format(n))
143
    gateway = factory.LazyAttribute(lambda a: a.subnet[:-4] + '1')
144
    subnet6 = "2001:648:2ffc:1112::/64"
145
    dhcp = False
146
    flavor = factory.Sequence(round_seq(models.Network.FLAVORS.keys()))
147
    mode = factory.LazyAttribute(lambda a:
148
                                 models.Network.FLAVORS[a.flavor]['mode'])
149
    link = factory.Sequence(prefix_seq('link'))
150
    mac_prefix = 'aa:00:0'
151
    tags = factory.LazyAttribute(lambda a:
152
                                 models.Network.FLAVORS[a.flavor]['tags'])
153
    public = False
154
    deleted = False
155
    state = factory.Sequence(round_seq_first(models.Network.OPER_STATES))
156

    
157

    
158
class IPv6NetworkFactory(NetworkFactory):
159
    subnet = None
160
    gateway = None
161

    
162

    
163
class DeletedNetwork(NetworkFactory):
164
    deleted = True
165

    
166

    
167
class BackendNetworkFactory(factory.DjangoModelFactory):
168
    FACTORY_FOR = models.BackendNetwork
169

    
170
    network = factory.SubFactory(NetworkFactory)
171
    backend = factory.SubFactory(BackendFactory)
172
    operstate = factory.Sequence(round_seq_first(FACTORY_FOR.OPER_STATES))
173

    
174

    
175
class NetworkInterfaceFactory(factory.DjangoModelFactory):
176
    FACTORY_FOR = models.NetworkInterface
177

    
178
    machine = factory.SubFactory(VirtualMachineFactory)
179
    network = factory.SubFactory(NetworkFactory)
180
    index = factory.Sequence(lambda x: x, type=int)
181
    mac = factory.Sequence(lambda n: 'aa:{0}{0}:{0}{0}:aa:{0}{0}:{0}{0}'
182
                           .format(hex(int(n) % 15)[2:3]))
183
    ipv4 = factory.LazyAttributeSequence(lambda a, n: a.network.subnet[:-4] +
184
                                         '{0}'.format(int(n) + 2))
185
    state = "ACTIVE"
186
    firewall_profile =\
187
        factory.Sequence(round_seq_first(FACTORY_FOR.FIREWALL_PROFILES))
188

    
189

    
190
class FloatingIPFactory(factory.DjangoModelFactory):
191
    FACTORY_FOR = models.FloatingIP
192

    
193
    machine = factory.SubFactory(VirtualMachineFactory)
194
    network = factory.SubFactory(NetworkFactory, public=False, deleted=False,
195
                                 floating_ip_pool=True)
196
    ipv4 = factory.LazyAttributeSequence(lambda a, n: a.network.subnet[:-4] +
197
                                         '{0}'.format(int(n) + 2))
198

    
199

    
200
class BridgePoolTableFactory(factory.DjangoModelFactory):
201
    FACTORY_FOR = models.BridgePoolTable
202

    
203
    size = 20
204
    base = 'prv'
205

    
206

    
207
class MacPrefixPoolTableFactory(factory.DjangoModelFactory):
208
    FACTORY_FOR = models.MacPrefixPoolTable
209
    size = 100
210
    base = 'aa:00:0'
211

    
212

    
213
class QuotaHolderSerialFactory(factory.DjangoModelFactory):
214
    FACTORY_FOR = models.QuotaHolderSerial
215
    serial = factory.Sequence(lambda x: x, type=int)