Revision 882b662f

b/snf-cyclades-app/synnefo/neutron/models.py
214 214

  
215 215

  
216 216
class Subnet(models.Model):
217
    SUBNET_NAME_LENGTH = 128
218

  
217 219
    subnet_id = models.CharField('ID of the subnet', max_length=128,
218 220
                                 null=True, db_index=True, primary_key=True)
219 221
    network = models.ForeignKey('Network')
220 222

  
221
    name = models.CharField('Network Name', max_length=128)
223
    name = models.CharField('Network Name', max_length=SUBNET_NAME_LENGTH)
222 224
    ipversion = models.IntegerField('IP Version', default=4)
223 225
    cidr = models.CharField('Subnet', max_length=32, null=True)
224 226
    gateway = models.CharField('Gateway', max_length=32, null=True)
b/snf-cyclades-app/synnefo/neutron/subnet_views.py
44 44

  
45 45
import ipaddr
46 46

  
47
log = getLogger('synnefo.neutron')
47
log = getLogger(__name__)
48 48

  
49 49

  
50 50
def demux(request):
51 51
    if request.method == 'GET':
52 52
        return list_subnets(request)
53 53
    elif request.method == 'POST':
54
        #return create_network(request)
55
        return HttpResponse("in subnet POST")
54
        return create_subnet(request)
56 55
    else:
57 56
        return api.api_method_not_allowed(request)
58 57

  
......
61 60
    if request.method == 'GET':
62 61
        return get_subnet(request, offset)
63 62
    elif request.method == 'DELETE':
64
        return delete_network(request, offset)
63
        return delete_subnet(request, offset)
65 64
    elif request.method == 'PUT':
66
        #return update_network(request,offset)
67
        return HttpResponse("in subnet det put")
65
        return update_subnet(request, offset)
68 66
    else:
69 67
        return api.api_method_not_allowed(request)
70 68

  
......
85 83
@api.api_method(http_method='POST', user_required=True, logger=log)
86 84
def create_subnet(request):
87 85
    '''Create a subnet'''
86

  
87
    dic = utils.get_request_dict(request)
88
    log.info('create subnet %s', dic)
88 89
    user_id = request.user_uniq
89 90

  
90 91
    try:
91
        dic = utils.get_request_dict(request)
92 92
        subnet = dic['subnet']
93 93
        network_id = subnet['network_id']
94 94
        cidr = subnet['cidr']
......
97 97

  
98 98
    ipversion = subnet.get('ip_version', 4)
99 99
    if ipversion not in [4, 6]:
100
        raise api.faults.BadRequests("Malformed IP version type")
100
        raise api.faults.BadRequest("Malformed IP version type")
101 101

  
102 102
    dhcp = subnet.get('enable_dhcp', True)
103
    if dhcp not in [True, False]:
104
        raise api.faults.BadRequest("Malformed request, enable_dhcp must be"
105
                                    " True or False")
103 106
    name = subnet.get('name', None)
107
    if len(str(name)) > Subnet.SUBNET_NAME_LENGTH:
108
        raise api.faults.BadRequest("Subnet name too long")
104 109

  
105 110
    # FIX ME, SNF:gateway6 vs gateway6
106 111
    gateway6 = subnet.get('SNF:gateway6', None)
107 112
    subnet6 = subnet.get('SNF:subnet6', None)
108 113

  
109
    # Returns the first available ip in the subnet
114
    # Returns the first available IP in the subnet
110 115
    potential_gateway = ipaddr.IPv4Network(cidr).network + 1
111 116
    gateway = subnet.get('gateway_ip', potential_gateway)
112 117

  
113
    networks.validate_network_params(subnet, gateway, subnet6, gateway6)
118
    networks.validate_network_params(cidr, gateway, subnet6, gateway6)
114 119

  
120
    # FIX ME
115 121
    try:
116 122
        sub = Subnet.objects.create(name=name, network_id=network_id,
117 123
                                    cidr=cidr, ipversion=ipversion,
118 124
                                    gateway=gateway, gateway6=gateway6,
119 125
                                    subnet6=subnet6)
120
    # FIX ME
121 126
    except:
122 127
        print "Error"
123 128

  
......
140 145
@api.api_method(http_method='DELETE', user_required=True, logger=log)
141 146
def delete_subnet(request, offset):
142 147
    '''Delete a subnet'''
143
    try:
144
        subnet = Subnet.objects.get(subnet_id=offset)
145
    except Subnet.DoesNotExist:
146
        raise api.faults.ItemNotFound("Subnet not found")
148
    # Commented until we have a design document
149
    #log.info('delete_subnet %s', offset)
150
    #try:
151
    #    subnet = Subnet.objects.get(subnet_id=offset)
152
    #except Subnet.DoesNotExist:
153
    #    raise api.faults.ItemNotFound("Subnet not found")
147 154
        # Add support for 409 error, subnet in use
148 155

  
149
    subnet.delete()
150
    return HttpResponse(status=204)
156
    #subnets.delete()
157
    #return HttpResponse(status=204)
158
    raise api.faults.BadRequest("Deletion of a subnet is not supported")
151 159

  
152 160

  
153 161
def subnet_to_dict(subnet):
b/snf-cyclades-app/synnefo/neutron/tests/api.py
136 136
        response = self.get(url)
137 137
        self.assertItemNotFound(response)
138 138

  
139
    def test_subnet_delete_not_found(self):
140
        '''Test delete a subnet that doesn't exist'''
141
        url = join_urls(SUBNETS_URL, '52')
142
        response = self.get(url)
143
        self.assertItemNotFound(response)
139
    #def test_subnet_delete_not_found(self):
140
     #   '''Test delete a subnet that doesn't exist'''
141
     #   # FIX ME
142
     #   url = join_urls(SUBNETS_URL, '52')
143
     #   response = self.get(url)
144
     #   self.assertItemNotFound(response)
144 145

  
145 146
    def test_subnet_delete(self):
146
        '''Test delete a subnet that's not in use'''
147
        '''Test delete a subnet -- not supported'''
147 148
        url = join_urls(SUBNETS_URL, '42')
148 149
        response = self.get(url)
149 150
        self.assertItemNotFound(response)
150 151

  
151 152
    def test_create_subnet_with_malformed_ipversion(self):
152 153
        '''Create a subnet with a malformed ip_version type'''
153
        # PEP8 for {{}}?
154
        request = {'subnet': {'network_id':
155
                              'ed2e3c10-2e43-4297-9006-2863a2d1abbc',
156
                              'cidr': '10.0.3.0/24',
157
                              'ip_version': 8}}
154
        request = {
155
            'subnet': {
156
                'network_id': 'ed2e3c10-2e43-4297-9006-2863a2d1abbc',
157
                'cidr': '10.0.3.0/24',
158
                'ip_version': 8}
159
        }
160
        response = self.post(SUBNETS_URL, "user9", json.dumps(request), "json")
161
        self.assertBadRequest(response)
162

  
163
    def test_create_subnet_with_invalid_cidr(self):
164
        '''Create a subnet with an invalid cidr'''
165
        request = {
166
            'subnet': {
167
                'network_id': 'ed2e3c10-2e43-4297-9006-2863a2d1abbc',
168
                'cidr': '192.168.3.0/8'}
169
        }
170
        response = self.post(SUBNETS_URL, "user9", json.dumps(request), "json")
171
        self.assertBadRequest(response)
158 172

  
173
    def test_create_subnet_with_invalid_gateway(self):
174
        '''Create a subnet with a gateway outside of the subnet range'''
175
        request = {
176
            'subnet': {
177
                'network_id': 'ed2e3c10-2e43-4297-9006-2863a2d1abbc',
178
                'cidr': '192.168.3.0/24',
179
                'gateway_ip': '192.168.0.1'}
180
        }
181
        response = self.post(SUBNETS_URL, "user9", json.dumps(request), "json")
182
        self.assertBadRequest(response)
183

  
184
    def test_create_subnet_with_long_name(self):
185
        '''Create a subnet with an invalid subnet name'''
186
        request = {
187
            'subnet': {
188
                'network_id': 'ed2e3c10-2e43-4297-9006-2863a2d1abbc',
189
                'cidr': '192.168.3.0/24',
190
                'name': 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
191
                        'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
192
                        'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'}
193
        }
194
        response = self.post(SUBNETS_URL, "user9", json.dumps(request), "json")
195
        self.assertBadRequest(response)
196

  
197
    def test_create_subnet_with_invalid_dhcp(self):
198
        '''Create a subnet with an invalid dhcp value'''
199
        request = {
200
            'subnet': {
201
                'network_id': 'ed2e3c10-2e43-4297-9006-2863a2d1abbc',
202
                'cidr': '192.168.3.0/24',
203
                'enable_dhcp': 'None'}
204
        }
159 205
        response = self.post(SUBNETS_URL, "user9", json.dumps(request), "json")
160 206
        self.assertBadRequest(response)

Also available in: Unified diff