diff options
-rw-r--r-- | src/identity/plugin_rest_identity.c | 34 | ||||
-rwxr-xr-x | src/identity/test_plugin_identity_rest.sh | 252 |
2 files changed, 282 insertions, 4 deletions
diff --git a/src/identity/plugin_rest_identity.c b/src/identity/plugin_rest_identity.c index 3fe749a52..49d7b58af 100644 --- a/src/identity/plugin_rest_identity.c +++ b/src/identity/plugin_rest_identity.c | |||
@@ -492,7 +492,7 @@ do_finished (void *cls, const char *emsg) | |||
492 | return; | 492 | return; |
493 | } | 493 | } |
494 | resp = GNUNET_REST_create_response (NULL); | 494 | resp = GNUNET_REST_create_response (NULL); |
495 | handle->proc (handle->proc_cls, resp, MHD_HTTP_CREATED); | 495 | handle->proc (handle->proc_cls, resp, handle->response_code); |
496 | cleanup_handle (handle); | 496 | cleanup_handle (handle); |
497 | } | 497 | } |
498 | 498 | ||
@@ -616,15 +616,16 @@ ego_create_cont (struct GNUNET_REST_RequestHandle *con, | |||
616 | //instead of parse | 616 | //instead of parse |
617 | if (!json_is_object(data_js)) | 617 | if (!json_is_object(data_js)) |
618 | { | 618 | { |
619 | json_decref(data_js); | ||
619 | handle->emsg = GNUNET_strdup (GNUNET_REST_ERROR_DATA_INVALID); | 620 | handle->emsg = GNUNET_strdup (GNUNET_REST_ERROR_DATA_INVALID); |
620 | GNUNET_SCHEDULER_add_now (&do_error, handle); | 621 | GNUNET_SCHEDULER_add_now (&do_error, handle); |
621 | return; | 622 | return; |
622 | } | 623 | } |
623 | 624 | ||
624 | if (1 != json_object_size(data_js)) | 625 | if (1 != json_object_size (data_js)) |
625 | { | 626 | { |
626 | json_decref (data_js); | 627 | json_decref (data_js); |
627 | handle->emsg = GNUNET_strdup ("Provided resource count invalid"); | 628 | handle->emsg = GNUNET_strdup("Provided resource count invalid"); |
628 | GNUNET_SCHEDULER_add_now (&do_error, handle); | 629 | GNUNET_SCHEDULER_add_now (&do_error, handle); |
629 | return; | 630 | return; |
630 | } | 631 | } |
@@ -638,6 +639,13 @@ ego_create_cont (struct GNUNET_REST_RequestHandle *con, | |||
638 | return; | 639 | return; |
639 | } | 640 | } |
640 | egoname = json_string_value (egoname_json); | 641 | egoname = json_string_value (egoname_json); |
642 | if(0 >= strlen(egoname)) | ||
643 | { | ||
644 | json_decref (data_js); | ||
645 | handle->emsg = GNUNET_strdup ("No name provided"); | ||
646 | GNUNET_SCHEDULER_add_now (&do_error, handle); | ||
647 | return; | ||
648 | } | ||
641 | for (ego_entry = handle->ego_head; | 649 | for (ego_entry = handle->ego_head; |
642 | NULL != ego_entry; | 650 | NULL != ego_entry; |
643 | ego_entry = ego_entry->next) | 651 | ego_entry = ego_entry->next) |
@@ -653,6 +661,7 @@ ego_create_cont (struct GNUNET_REST_RequestHandle *con, | |||
653 | } | 661 | } |
654 | GNUNET_asprintf (&handle->name, "%s", egoname); | 662 | GNUNET_asprintf (&handle->name, "%s", egoname); |
655 | json_decref (data_js); | 663 | json_decref (data_js); |
664 | handle->response_code = MHD_HTTP_CREATED; | ||
656 | handle->op = GNUNET_IDENTITY_create (handle->identity_handle, | 665 | handle->op = GNUNET_IDENTITY_create (handle->identity_handle, |
657 | handle->name, | 666 | handle->name, |
658 | &do_finished, | 667 | &do_finished, |
@@ -752,6 +761,13 @@ ego_edit_cont (struct GNUNET_REST_RequestHandle *con, | |||
752 | if ((NULL != name_json) && json_is_string (name_json)) | 761 | if ((NULL != name_json) && json_is_string (name_json)) |
753 | { | 762 | { |
754 | newname = json_string_value (name_json); | 763 | newname = json_string_value (name_json); |
764 | if(0 >= strlen(newname)) | ||
765 | { | ||
766 | json_decref (data_js); | ||
767 | handle->emsg = GNUNET_strdup ("No name provided"); | ||
768 | GNUNET_SCHEDULER_add_now (&do_error, handle); | ||
769 | return; | ||
770 | } | ||
755 | for (ego_entry_tmp = handle->ego_head; | 771 | for (ego_entry_tmp = handle->ego_head; |
756 | NULL != ego_entry_tmp; | 772 | NULL != ego_entry_tmp; |
757 | ego_entry_tmp = ego_entry_tmp->next) | 773 | ego_entry_tmp = ego_entry_tmp->next) |
@@ -767,6 +783,7 @@ ego_edit_cont (struct GNUNET_REST_RequestHandle *con, | |||
767 | return; | 783 | return; |
768 | } | 784 | } |
769 | } | 785 | } |
786 | handle->response_code = MHD_HTTP_NO_CONTENT; | ||
770 | handle->op = GNUNET_IDENTITY_rename (handle->identity_handle, | 787 | handle->op = GNUNET_IDENTITY_rename (handle->identity_handle, |
771 | ego_entry->identifier, | 788 | ego_entry->identifier, |
772 | newname, | 789 | newname, |
@@ -781,8 +798,16 @@ ego_edit_cont (struct GNUNET_REST_RequestHandle *con, | |||
781 | if ( (NULL != subsys_json) && json_is_string (subsys_json)) | 798 | if ( (NULL != subsys_json) && json_is_string (subsys_json)) |
782 | { | 799 | { |
783 | subsys = json_string_value (subsys_json); | 800 | subsys = json_string_value (subsys_json); |
801 | if(0 >= strlen(subsys)) | ||
802 | { | ||
803 | json_decref (data_js); | ||
804 | handle->emsg = GNUNET_strdup ("No name provided"); | ||
805 | GNUNET_SCHEDULER_add_now (&do_error, handle); | ||
806 | return; | ||
807 | } | ||
784 | GNUNET_asprintf (&handle->subsys, "%s", subsys); | 808 | GNUNET_asprintf (&handle->subsys, "%s", subsys); |
785 | json_decref (data_js); | 809 | json_decref (data_js); |
810 | handle->response_code = MHD_HTTP_NO_CONTENT; | ||
786 | handle->op = GNUNET_IDENTITY_set (handle->identity_handle, | 811 | handle->op = GNUNET_IDENTITY_set (handle->identity_handle, |
787 | handle->subsys, | 812 | handle->subsys, |
788 | ego_entry->ego, | 813 | ego_entry->ego, |
@@ -837,6 +862,7 @@ ego_delete_cont (struct GNUNET_REST_RequestHandle *con_handle, | |||
837 | cleanup_handle (handle); | 862 | cleanup_handle (handle); |
838 | return; | 863 | return; |
839 | } | 864 | } |
865 | handle->response_code = MHD_HTTP_NO_CONTENT; | ||
840 | handle->op = GNUNET_IDENTITY_delete (handle->identity_handle, | 866 | handle->op = GNUNET_IDENTITY_delete (handle->identity_handle, |
841 | ego_entry->identifier, | 867 | ego_entry->identifier, |
842 | &do_finished, | 868 | &do_finished, |
@@ -980,7 +1006,7 @@ rest_identity_process_request(struct GNUNET_REST_RequestHandle *conndata_handle, | |||
980 | 1006 | ||
981 | 1007 | ||
982 | handle->timeout = GNUNET_TIME_UNIT_FOREVER_REL; | 1008 | handle->timeout = GNUNET_TIME_UNIT_FOREVER_REL; |
983 | 1009 | handle->response_code = MHD_HTTP_OK; | |
984 | handle->proc_cls = proc_cls; | 1010 | handle->proc_cls = proc_cls; |
985 | handle->proc = proc; | 1011 | handle->proc = proc; |
986 | handle->state = ID_REST_STATE_INIT; | 1012 | handle->state = ID_REST_STATE_INIT; |
diff --git a/src/identity/test_plugin_identity_rest.sh b/src/identity/test_plugin_identity_rest.sh new file mode 100755 index 000000000..d43f4206b --- /dev/null +++ b/src/identity/test_plugin_identity_rest.sh | |||
@@ -0,0 +1,252 @@ | |||
1 | #!/usr/bin/bash | ||
2 | |||
3 | #First, start gnunet-arm and the rest-service. Make sure, no identity exists | ||
4 | |||
5 | link_to_api="http://localhost:7776/identity" | ||
6 | wrong_link="http://localhost:7776/idenmmmy" | ||
7 | |||
8 | #Test GET (multiple identities) for error when no identity exists | ||
9 | |||
10 | echo "No test for subsystem available" | ||
11 | echo "The next test case can be ignored if you have already added identities" | ||
12 | cache="$(curl --silent "$link_to_api" | grep "error")" | ||
13 | if [ "" == "$cache" ] | ||
14 | then | ||
15 | echo -n -e "[\033[0;31m FAILURE\033[0m ] Success for GET request when missing identity\n" | ||
16 | else | ||
17 | echo -n -e "[\033[0;32m SUCCESS\033[0m ] Error for GET request when missing identity\n" | ||
18 | fi | ||
19 | |||
20 | #Test POST success code, error response code and error json | ||
21 | echo "The next test case can be ignored if you have already added an identity with the name Test" | ||
22 | cache="$(curl -v -X "POST" "$link_to_api" --data "{\"name\":\"Test\"}" 2>&1 | grep "HTTP/1.1 201")" | ||
23 | if [ "" == "$cache" ] | ||
24 | then | ||
25 | echo -n -e "[\033[0;31m FAILURE\033[0m ] Error for good POST request\n" | ||
26 | else | ||
27 | echo -n -e "[\033[0;32m SUCCESS\033[0m ] Success for good POST request\n" | ||
28 | fi | ||
29 | |||
30 | cache="$(curl -v -X "POST" "$link_to_api" --data "{\"name\":\"Test\"}" 2>&1 | grep "HTTP/1.1 409")" | ||
31 | if [ "" == "$cache" ] | ||
32 | then | ||
33 | echo -n -e "[\033[0;31m FAILURE\033[0m ] Success for duplicate name POST request\n" | ||
34 | else | ||
35 | echo -n -e "[\033[0;32m SUCCESS\033[0m ] Error for duplicate name POST request\n" | ||
36 | fi | ||
37 | |||
38 | cache="$(curl -v -X "POST" "$link_to_api" 2>&1 | grep "error")" | ||
39 | if [ "" == "$cache" ] | ||
40 | then | ||
41 | echo -n -e "[\033[0;31m FAILURE\033[0m ] Success for no data POST request\n" | ||
42 | else | ||
43 | echo -n -e "[\033[0;32m SUCCESS\033[0m ] Error for no data POST request\n" | ||
44 | fi | ||
45 | |||
46 | cache="$(curl -v -X "POST" "$link_to_api" --data "wrong" 2>&1 | grep "error")" | ||
47 | if [ "" == "$cache" ] | ||
48 | then | ||
49 | echo -n -e "[\033[0;31m FAILURE\033[0m ] Success for wrong data POST request\n" | ||
50 | else | ||
51 | echo -n -e "[\033[0;32m SUCCESS\033[0m ] Error for wrong data POST request\n" | ||
52 | fi | ||
53 | |||
54 | cache="$(curl -v -X "POST" "$link_to_api" --data "[{}]" 2>&1 | grep "error")" | ||
55 | if [ "" == "$cache" ] | ||
56 | then | ||
57 | echo -n -e "[\033[0;31m FAILURE\033[0m ] Success for json array input POST request\n" | ||
58 | else | ||
59 | echo -n -e "[\033[0;32m SUCCESS\033[0m ] Error for json array input POST request\n" | ||
60 | fi | ||
61 | |||
62 | cache="$(curl -v -X "POST" "$link_to_api" --data "{\"name\":\"Test\",\"other\":\"Test\"}" 2>&1 | grep "error")" | ||
63 | if [ "" == "$cache" ] | ||
64 | then | ||
65 | echo -n -e "[\033[0;31m FAILURE\033[0m ] Success for multi element json POST request\n" | ||
66 | else | ||
67 | echo -n -e "[\033[0;32m SUCCESS\033[0m ] Error for multi element json POST request\n" | ||
68 | fi | ||
69 | |||
70 | cache="$(curl -v -X "POST" "$link_to_api" --data "{\"nam\":\"Test\"}" 2>&1 | grep "error")" | ||
71 | if [ "" == "$cache" ] | ||
72 | then | ||
73 | echo -n -e "[\033[0;31m FAILURE\033[0m ] Success for wrong json POST request\n" | ||
74 | else | ||
75 | echo -n -e "[\033[0;32m SUCCESS\033[0m ] Error for wrong json POST request\n" | ||
76 | fi | ||
77 | |||
78 | cache="$(curl -v -X "POST" "$link_to_api" --data "{\"name\":123}" 2>&1 | grep "error")" | ||
79 | if [ "" == "$cache" ] | ||
80 | then | ||
81 | echo -n -e "[\033[0;31m FAILURE\033[0m ] Success for wrong json type POST request\n" | ||
82 | else | ||
83 | echo -n -e "[\033[0;32m SUCCESS\033[0m ] Error for wrong json type POST request\n" | ||
84 | fi | ||
85 | |||
86 | cache="$(curl -v -X "POST" "$link_to_api" --data "{\"name\":""}" 2>&1 | grep "error")" | ||
87 | if [ "" == "$cache" ] | ||
88 | then | ||
89 | echo -n -e "[\033[0;31m FAILURE\033[0m ] Success for no name POST request\n" | ||
90 | else | ||
91 | echo -n -e "[\033[0;32m SUCCESS\033[0m ] Error for no name POST request\n" | ||
92 | fi | ||
93 | |||
94 | |||
95 | #Test GET (multiple identities) for success and error json | ||
96 | cache="$(curl --silent "$link_to_api" | grep "error")" | ||
97 | if [ "" == "$cache" ] | ||
98 | then | ||
99 | echo -n -e "[\033[0;32m SUCCESS\033[0m ] Success for good GET request (multiple identities)\n" | ||
100 | else | ||
101 | echo -n -e "[\033[0;31m FAILURE\033[0m ] Error for good GET request (multiple identities)\n" | ||
102 | fi | ||
103 | |||
104 | |||
105 | id="$(gnunet-identity -d | grep "Test - " | sed "s/Test - //g")" | ||
106 | #Test GET (one identity) for success and error json | ||
107 | cache="$(curl --silent "${link_to_api}/$id" | grep "error")" | ||
108 | if [ "" == "$cache" ] | ||
109 | then | ||
110 | echo -n -e "[\033[0;32m SUCCESS\033[0m ] Success for good GET request (one identity)\n" | ||
111 | else | ||
112 | echo -n -e "[\033[0;31m FAILURE\033[0m ] Error for good GET request (one identity)\n" | ||
113 | fi | ||
114 | |||
115 | |||
116 | #Test DELETE success code, error response code and error json | ||
117 | echo "Next tests for DELETE will probably fail when POST fails" | ||
118 | cache="$(curl -v -X "DELETE" "${link_to_api}/$id" 2>&1 | grep "HTTP/1.1 404")" | ||
119 | if [ "" == "$cache" ] | ||
120 | then | ||
121 | echo -n -e "[\033[0;32m SUCCESS\033[0m ] Success for good DELETE request\n" | ||
122 | else | ||
123 | echo -n -e "[\033[0;31m FAILURE\033[0m ] Error for good DELETE request\n" | ||
124 | fi | ||
125 | |||
126 | curl --silent -X "POST" "$link_to_api" --data "{\"name\":\"Test\"}" | ||
127 | id="$(gnunet-identity -d | grep "Test - " | sed "s/Test - //g")" | ||
128 | |||
129 | cache="$(curl -v -X "DELETE" "${link_to_api}/df1" 2>&1 | grep "HTTP/1.1 404")" | ||
130 | if [ "" == "$cache" ] | ||
131 | then | ||
132 | echo -n -e "[\033[0;31m FAILURE\033[0m ] Success for wrong DELETE request\n" | ||
133 | else | ||
134 | echo -n -e "[\033[0;32m SUCCESS\033[0m ] Error for wrong DELETE request\n" | ||
135 | fi | ||
136 | |||
137 | #Test PUT success code, error response codes and error json | ||
138 | cache="$(curl -v -X "PUT" "${link_to_api}/$id" --data "{\"newname\":\"NewTest\"}" 2>&1 | grep "HTTP/1.1 204")" | ||
139 | if [ "" == "$cache" ] | ||
140 | then | ||
141 | echo -n -e "[\033[0;31m FAILURE\033[0m ] Error for good PUT request\n" | ||
142 | else | ||
143 | echo -n -e "[\033[0;32m SUCCESS\033[0m ] Success for good PUT request\n" | ||
144 | fi | ||
145 | |||
146 | cache="$(curl -v -X "PUT" "${link_to_api}/${id}1" --data "{\"newname\":\"NewNewTest\"}" 2>&1 | grep "HTTP/1.1 404")" | ||
147 | if [ "" == "$cache" ] | ||
148 | then | ||
149 | echo -n -e "[\033[0;31m FAILURE\033[0m ] Success for wrong identity PUT request\n" | ||
150 | else | ||
151 | echo -n -e "[\033[0;32m SUCCESS\033[0m ] Error for wrong identity PUT request\n" | ||
152 | fi | ||
153 | |||
154 | cache="$(curl -v -X "PUT" "$link_to_api/$id" --data "{\"newname\":\"NewTest\"}" 2>&1 | grep "error")" | ||
155 | if [ "" == "$cache" ] | ||
156 | then | ||
157 | echo -n -e "[\033[0;31m FAILURE\033[0m ] Success for duplicate name PUT request\n" | ||
158 | else | ||
159 | echo -n -e "[\033[0;32m SUCCESS\033[0m ] Error for duplicate name PUT request\n" | ||
160 | fi | ||
161 | |||
162 | cache="$(curl -v -X "PUT" "$link_to_api/$id" 2>&1 | grep "error")" | ||
163 | if [ "" == "$cache" ] | ||
164 | then | ||
165 | echo -n -e "[\033[0;31m FAILURE\033[0m ] Success for no data PUT request\n" | ||
166 | else | ||
167 | echo -n -e "[\033[0;32m SUCCESS\033[0m ] Error for no data PUT request\n" | ||
168 | fi | ||
169 | |||
170 | cache="$(curl -v -X "PUT" "$link_to_api/$id" --data "wrong" 2>&1 | grep "error")" | ||
171 | if [ "" == "$cache" ] | ||
172 | then | ||
173 | echo -n -e "[\033[0;31m FAILURE\033[0m ] Success for wrong data PUT request\n" | ||
174 | else | ||
175 | echo -n -e "[\033[0;32m SUCCESS\033[0m ] Error for wrong data PUT request\n" | ||
176 | fi | ||
177 | |||
178 | cache="$(curl -v -X "PUT" "$link_to_api/$id" --data "[{}]" 2>&1 | grep "error")" | ||
179 | if [ "" == "$cache" ] | ||
180 | then | ||
181 | echo -n -e "[\033[0;31m FAILURE\033[0m ] Success for json array input PUT request\n" | ||
182 | else | ||
183 | echo -n -e "[\033[0;32m SUCCESS\033[0m ] Error for json array input PUT request\n" | ||
184 | fi | ||
185 | |||
186 | cache="$(curl -v -X "PUT" "$link_to_api/$id" --data "{\"newname\":\"Test\",\"other\":\"Test\"}" 2>&1 | grep "error")" | ||
187 | if [ "" == "$cache" ] | ||
188 | then | ||
189 | echo -n -e "[\033[0;31m FAILURE\033[0m ] Success for multi element json PUT request\n" | ||
190 | else | ||
191 | echo -n -e "[\033[0;32m SUCCESS\033[0m ] Error for multi element json PUT request\n" | ||
192 | fi | ||
193 | |||
194 | cache="$(curl -v -X "PUT" "$link_to_api/$id" --data "{\"newnam\":\"Test\"}" 2>&1 | grep "error")" | ||
195 | if [ "" == "$cache" ] | ||
196 | then | ||
197 | echo -n -e "[\033[0;31m FAILURE\033[0m ] Success for wrong json PUT request\n" | ||
198 | else | ||
199 | echo -n -e "[\033[0;32m SUCCESS\033[0m ] Error for wrong json PUT request\n" | ||
200 | fi | ||
201 | |||
202 | cache="$(curl -v -X "PUT" "$link_to_api/$id" --data "{\"newname\":123}" 2>&1 | grep "error")" | ||
203 | if [ "" == "$cache" ] | ||
204 | then | ||
205 | echo -n -e "[\033[0;31m FAILURE\033[0m ] Success for wrong json type PUT request\n" | ||
206 | else | ||
207 | echo -n -e "[\033[0;32m SUCCESS\033[0m ] Error for wrong json type PUT request\n" | ||
208 | fi | ||
209 | |||
210 | cache="$(curl -v -X "PUT" "$link_to_api/$id" --data "{\"newname\":""}" 2>&1 | grep "error")" | ||
211 | if [ "" == "$cache" ] | ||
212 | then | ||
213 | echo -n -e "[\033[0;31m FAILURE\033[0m ] Success for no name PUT request\n" | ||
214 | else | ||
215 | echo -n -e "[\033[0;32m SUCCESS\033[0m ] Error for no name PUT request\n" | ||
216 | fi | ||
217 | #TODO Missing subsystem test | ||
218 | |||
219 | #Missing OPTIONS success - nothing can really go wrong here | ||
220 | |||
221 | #Test wrong url | ||
222 | cache="$(curl -v "$wrong_link" 2>&1 | grep "HTTP/1.1 404")" | ||
223 | if [ "" == "$cache" ] | ||
224 | then | ||
225 | echo -n -e "[\033[0;31m FAILURE\033[0m ] Success for wrong url GET request \n" | ||
226 | else | ||
227 | echo -n -e "[\033[0;32m SUCCESS\033[0m ] Error for wrong url GET request \n" | ||
228 | fi | ||
229 | |||
230 | cache="$(curl -X "PUT" -v "$wrong_link/$id" --data "{\"newname\":\"Testing\"}" 2>&1 | grep "HTTP/1.1 404")" | ||
231 | if [ "" == "$cache" ] | ||
232 | then | ||
233 | echo -n -e "[\033[0;31m FAILURE\033[0m ] Success for wrong url GET request \n" | ||
234 | else | ||
235 | echo -n -e "[\033[0;32m SUCCESS\033[0m ] Error for wrong url GET request \n" | ||
236 | fi | ||
237 | |||
238 | cache="$(curl -X "POST" -v "$wrong_link/$id" --data "{\"name\":\"Test\"}" 2>&1 | grep "HTTP/1.1 404")" | ||
239 | if [ "" == "$cache" ] | ||
240 | then | ||
241 | echo -n -e "[\033[0;31m FAILURE\033[0m ] Success for wrong url POST request \n" | ||
242 | else | ||
243 | echo -n -e "[\033[0;32m SUCCESS\033[0m ] Error for wrong url POST request \n" | ||
244 | fi | ||
245 | |||
246 | cache="$(curl -X "DELETE" -v "${wrong_link}/$id" 2>&1 | grep "HTTP/1.1 404")" | ||
247 | if [ "" == "$cache" ] | ||
248 | then | ||
249 | echo -n -e "[\033[0;31m FAILURE\033[0m ] Success for wrong url DELETE request \n" | ||
250 | else | ||
251 | echo -n -e "[\033[0;32m SUCCESS\033[0m ] Error for wrong url DELETE request \n" | ||
252 | fi | ||