2 * Copyright (C) 2015 IBM, Inc.
4 * This program and the accompanying materials are made available under the
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
8 package org.opendaylight.neutron.e2etest;
10 public class NeutronSecurityRuleTests {
12 private static final String TEST_SECURITY_GROUP_ID = "b60490fe-60a5-40be-af63-1d641381b784";
14 private final String base;
16 public NeutronSecurityRuleTests(String base) {
20 private void securityRule_collection_get_test() {
21 String url = base + "/security-group-rules";
22 HttpUtils.test_fetch(url, "Security Rule Collection GET failed");
25 private void singleton_sr_without_groupid_create_test(int responseCode) {
26 String url = base + "/security-group-rules";
27 String content = " {\"security_group_rule\": " + "{\"remote_group_id\": null, \"direction\": \"ingress\", "
28 + "\"remote_ip_prefix\": null, \"protocol\": \"tcp\", " + "\"ethertype\": \"IPv6\", \"tenant_id\": "
29 + "\"00f340c7c3b34ab7be1fc690c05a0275\", \"port_range_max\": 77, " + "\"port_range_min\": 77, "
30 + "\"id\": \"9b4be7fa-e56e-40fb-9516-1f0fa9185669\"}}"; // no security_group_id
31 HttpUtils.test_create(url, responseCode, content, "Security Rule Singleton Post Failed");
34 private String singleton_sr_create_test(int responseCode) {
35 String url = base + "/security-group-rules";
36 String content = " {\"security_group_rule\": " + "{\"remote_group_id\": null, \"direction\": \"ingress\", "
37 + "\"remote_ip_prefix\": null, \"protocol\": \"tcp\", " + "\"ethertype\": \"IPv6\", \"tenant_id\": "
38 + "\"00f340c7c3b34ab7be1fc690c05a0275\", \"port_range_max\": 77, " + "\"port_range_min\": 77, "
39 + "\"id\": \"9b4be7fa-e56e-40fb-9516-1f0fa9185669\", " + "\"security_group_id\": "
40 + "\"" + TEST_SECURITY_GROUP_ID + "\"}}";
41 HttpUtils.test_create(url, responseCode, content, "Security Rule Singleton Post Failed");
45 private void singleton_sr_get_with_one_query_item_test(String createJsonString) {
46 String url = base + "/security-group-rules";
47 HttpUtils.test_fetch_with_one_query_item(url, createJsonString, "security_group_rules");
50 private void multiple_sr_create_test() {
51 String url = base + "/security-group-rules";
52 String content = " {\"security_group_rules\": [" + "{" + " \"id\": \"35fb0f34-c8d3-416d-a205-a2c75f7b8e22\","
53 + " \"direction\": \"egress\"," + " \"ethertype\": \"IPv6\"," + " \"protocol\": \"tcp\","
54 + " \"security_group_id\": \"b60490fe-60a5-40be-af63-1d641381b784\","
55 + " \"tenant_id\": \"2640ee2ac2474bf3906e482047204fcb\"" + "}," + "{"
56 + " \"id\": \"63814eed-bc12-4fe4-8b17-2af178224c71\"," + " \"direction\": \"egress\","
57 + " \"ethertype\": \"IPv4\"," + " \"protocol\": \"6\","
58 + " \"security_group_id\": \"b60490fe-60a5-40be-af63-1d641381b784\","
59 + " \"tenant_id\": \"2640ee2ac2474bf3906e482047204fcb\"" + "}," + "{"
60 + " \"id\": \"ccb9823e-559b-4d84-b656-2739f8e56d89\"," + " \"direction\": \"ingress\","
61 + " \"ethertype\": \"IPv6\"," + " \"protocol\": 6,"
62 + " \"remote_group_id\": \"b60490fe-60a5-40be-af63-1d641381b784\","
63 + " \"security_group_id\": \"b60490fe-60a5-40be-af63-1d641381b784\","
64 + " \"tenant_id\": \"2640ee2ac2474bf3906e482047204fcb\"" + "}," + "{"
65 + " \"id\": \"fbc3f809-7378-40a4-822f-7a70f6ccba98\"," + " \"direction\": \"ingress\","
66 + " \"ethertype\": \"IPv4\"," + " \"protocol\": \"udp\","
67 + " \"remote_group_id\": \"b60490fe-60a5-40be-af63-1d641381b784\","
68 + " \"security_group_id\": \"b60490fe-60a5-40be-af63-1d641381b784\","
69 + " \"tenant_id\": \"2640ee2ac2474bf3906e482047204fcb\"" + "}" + "]}";
70 HttpUtils.test_create(url, content, "Security Rule Multiple Post Failed");
73 private void singleton_sr_modify_test(int responseCode, boolean withSecurityGroupID) {
74 String url = base + "/security-group-rules/9b4be7fa-e56e-40fb-9516-1f0fa9185669";
75 String content = " {\"security_group_rule\": " + "{\"remote_group_id\": null, \"direction\": \"egress\", "
76 + "\"remote_ip_prefix\": null, \"protocol\": \"tcp\", " + "\"ethertype\": \"IPv6\", \"tenant_id\": "
77 + "\"00f340c7c3b34ab7be1fc690c05a0275\", \"port_range_max\": 77, " + "\"port_range_min\": 77, "
78 + "\"id\": \"9b4be7fa-e56e-40fb-9516-1f0fa9185669\"";
79 content += withSecurityGroupID ? ", " + "\"security_group_id\": \"" + TEST_SECURITY_GROUP_ID + "\"}}" : "}}";
80 HttpUtils.test_modify(url, responseCode, content, "Security Rule Singleton Put Failed");
83 private void sr_element_get_test() {
84 String url = base + "/security-group-rules/9b4be7fa-e56e-40fb-9516-1f0fa9185669";
85 HttpUtils.test_fetch(url, true, "Security Rule Element Get Failed");
88 private void sr_element_get_with_query_test() {
89 String url = base + "/security-group-rules/9b4be7fa-e56e-40fb-9516-1f0fa9185669"
90 + "?fields=id&fields=direction&fields=protocol&fields=port_range_min"
91 + "&fields=port_range_max&fields=ethertype&fields=remote_ip_prefix"
92 + "&fields=remote_group_id&fields=security_group_id&fields=tenant_id"
93 + "&fields=limit&fields=marker&fields=page_reverse";
94 HttpUtils.test_fetch(url, true, "Security Rule Element Get With Query Failed");
97 private void sr_delete_test() {
98 String url = base + "/security-group-rules/9b4be7fa-e56e-40fb-9516-1f0fa9185669";
99 HttpUtils.test_delete(url, "Security Rule Delete Failed");
102 private void sr_element_negative_get_test() {
103 String url = base + "/security-group-rules/9b4be7fa-e56e-40fb-9516-1f0fa9185669";
104 HttpUtils.test_fetch(url, false, "Security Rule Element Negative Get Failed");
107 private void bug5478_rule_delete_negative_test() {
108 String url = base + "/security-group-rules/9b4be7fa-e56e-40fb-9516-1f0fa9185669";
109 HttpUtils.test_delete_404(url, "Security Rule Delete 404 Failed");
112 private void bug4043_ipv4_test() {
113 String url = base + "/security-group-rules";
114 String content = " {\"security_group_rule\": " + "{\"remote_group_id\": null, \"direction\": \"ingress\", "
115 + "\"remote_ip_prefix\": \"10.10.10.10/16\", \"protocol\": \"tcp\", "
116 + "\"ethertype\": \"IPv4\", \"tenant_id\": "
117 + "\"00f340c7c3b34ab7be1fc690c05a0275\", \"port_range_max\": 77, " + "\"port_range_min\": 77, "
118 + "\"id\": \"01234567-0123-0123-0123-01234567890a\", " + "\"security_group_id\": "
119 + "\"" + TEST_SECURITY_GROUP_ID + "\"}}";
120 HttpUtils.test_create(url, content, "Security Rule bug4043 IPv4 Failed");
122 url = url + "/01234567-0123-0123-0123-01234567890a";
123 HttpUtils.test_delete(url, "Security Rule Delete Failed");
126 private void bug4043_ipv6_test() {
127 String url = base + "/security-group-rules";
128 String content = " {\"security_group_rule\": " + "{\"remote_group_id\": null, \"direction\": \"ingress\", "
129 + "\"remote_ip_prefix\": \"fe80::1/10\", \"protocol\": \"tcp\", "
130 + "\"ethertype\": \"IPv6\", \"tenant_id\": "
131 + "\"00f340c7c3b34ab7be1fc690c05a0275\", \"port_range_max\": 77, " + "\"port_range_min\": 77, "
132 + "\"id\": \"01234567-0123-0123-0123-01234567890a\", " + "\"security_group_id\": "
133 + "\"b60490fe-60a5-40be-af63-1d641381b784\"}}";
134 HttpUtils.test_create(url, content, "Security Rule Bug4043 IPv6 Failed");
136 url = url + "/01234567-0123-0123-0123-01234567890a";
137 HttpUtils.test_delete(url, "Security Rule Delete Failed");
140 private String bug6398_sr_create_test() {
141 String url = base + "/security-group-rules";
142 String content = " {\"security_group_rule\": " + "{\"remote_group_id\": null, \"direction\": \"ingress\", "
143 + "\"remote_ip_prefix\": null, \"protocol\": \"TCP\", " + "\"ethertype\": \"IPv6\", \"tenant_id\": "
144 + "\"00f340c7c3b34ab7be1fc690c05a0275\", \"port_range_max\": 77, " + "\"port_range_min\": 77, "
145 + "\"id\": \"9b4be7fa-e56e-40fb-9516-1f0fa9185669\", " + "\"security_group_id\": "
146 + "\"b60490fe-60a5-40be-af63-1d641381b784\"}}";
147 HttpUtils.test_create(url, 400, content, "Security Rule Singleton Post Bug 6398 regressed");
151 public static void runTests(String base) {
152 NeutronSecurityRuleTests securityRuleTester = new NeutronSecurityRuleTests(base);
153 securityRuleTester.singleton_sr_without_groupid_create_test(500);
154 securityRuleTester.singleton_sr_create_test(HttpUtils.HTTP_MISSING_DEPENDENCY); // NEUTRON-158
155 securityRuleTester.singleton_sr_modify_test(404, true); // cannot modify a SR that has not been created
156 new NeutronSecurityGroupTests(base).singleton_sg_create(TEST_SECURITY_GROUP_ID);
157 String createJsonString = securityRuleTester.singleton_sr_create_test(201);
158 securityRuleTester.singleton_sr_get_with_one_query_item_test(createJsonString);
159 securityRuleTester.multiple_sr_create_test();
160 securityRuleTester.singleton_sr_modify_test(200, true);
161 securityRuleTester.singleton_sr_modify_test(500, false); // Sic! Partial delta updates are not possible.
162 securityRuleTester.sr_element_get_test();
163 securityRuleTester.sr_element_get_with_query_test();
164 securityRuleTester.securityRule_collection_get_test();
165 securityRuleTester.sr_delete_test();
166 securityRuleTester.sr_element_negative_get_test();
167 securityRuleTester.bug5478_rule_delete_negative_test();
168 securityRuleTester.bug4043_ipv4_test();
169 securityRuleTester.bug4043_ipv6_test();
170 securityRuleTester.bug6398_sr_create_test();
172 // NEUTRON-158: Cannot modify a SR who's SG is already deleted
173 securityRuleTester.singleton_sr_create_test(201);
174 new NeutronSecurityGroupTests(base).sg_delete(TEST_SECURITY_GROUP_ID);
175 securityRuleTester.singleton_sr_modify_test(HttpUtils.HTTP_MISSING_DEPENDENCY, true);