Statistics
| Branch: | Tag: | Revision:

root / snf-cyclades-app / synnefo / db / models_factory.py @ 7b72b50d

History | View | Annotate | Download (6.6 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
    disk_templates = ["file", "plain", "drbd"]
84

    
85

    
86
class DrainedBackend(BackendFactory):
87
    drained = True
88

    
89

    
90
class OfflineBackend(BackendFactory):
91
    offline = True
92

    
93

    
94
class VirtualMachineFactory(factory.DjangoModelFactory):
95
    FACTORY_FOR = models.VirtualMachine
96

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

    
106

    
107
class DeletedVirtualMachine(VirtualMachineFactory):
108
    deleted = True
109

    
110

    
111
class ErrorVirtualMachine(VirtualMachineFactory):
112
    operstate = "ERROR"
113

    
114

    
115
class BuildVirtualMachine(VirtualMachineFactory):
116
    operstate = "BUILD"
117

    
118

    
119
class DestroyedVirtualMachine(VirtualMachineFactory):
120
    operstate = "DESTROYED"
121

    
122

    
123
class StartedVirtualMachine(VirtualMachineFactory):
124
    operstate = "STARTED"
125

    
126

    
127
class StopedVirtualMachine(VirtualMachineFactory):
128
    operstate = "STOPED"
129

    
130

    
131
class VirtualMachineMetadataFactory(factory.DjangoModelFactory):
132
    FACTORY_FOR = models.VirtualMachineMetadata
133

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

    
138

    
139
class NetworkFactory(factory.DjangoModelFactory):
140
    FACTORY_FOR = models.Network
141

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

    
159

    
160
class IPv6NetworkFactory(NetworkFactory):
161
    subnet = None
162
    gateway = None
163

    
164

    
165
class DeletedNetwork(NetworkFactory):
166
    deleted = True
167

    
168

    
169
class BackendNetworkFactory(factory.DjangoModelFactory):
170
    FACTORY_FOR = models.BackendNetwork
171

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

    
176

    
177
class NetworkInterfaceFactory(factory.DjangoModelFactory):
178
    FACTORY_FOR = models.NetworkInterface
179

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

    
191

    
192
class FloatingIPFactory(factory.DjangoModelFactory):
193
    FACTORY_FOR = models.FloatingIP
194

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

    
201

    
202
class BridgePoolTableFactory(factory.DjangoModelFactory):
203
    FACTORY_FOR = models.BridgePoolTable
204

    
205
    size = 20
206
    base = 'prv'
207

    
208

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

    
214

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