Fix api bugs
authorJeroen van der Heijden <jeroen@transceptor.technology>
Mon, 20 Jan 2020 13:21:06 +0000 (14:21 +0100)
committerJeroen van der Heijden <jeroen@transceptor.technology>
Mon, 20 Jan 2020 13:21:06 +0000 (14:21 +0100)
itest/test_http_api.py
src/siri/api.c

index 5967a0b7b6b958b04af04b721f80dbe2b19bf1a0..ee39ad3e480ac8264e31dcb73de3726683344c19 100644 (file)
@@ -34,6 +34,21 @@ class TestHTTPAPI(TestBase):
     async def run(self):
         await self.client0.connect()
 
+        x = requests.get(
+            f'http://localhost:9020/get-version', auth=('sa', 'siri'))
+
+        self.assertEqual(x.status_code, 200)
+        v = x.json()
+        self.assertTrue(isinstance(v, list))
+        self.assertTrue(isinstance(v[0], str))
+
+        x = requests.post(
+            f'http://localhost:9020/insert/dbtest',
+            auth=('iris', 'siri'),
+            headers={'Content-Type': 'application/json'})
+
+        self.assertEqual(x.status_code, 400)
+
         series_float = gen_points(
             tp=float, n=10000, time_precision=TIME_PRECISION, ts_gap='5m')
 
index 56315187ebd9fedb3e0d888dd5489d3bc39039b5..bd3cf5ac4434e588946fff48f2220374c74e3c8f 100644 (file)
@@ -168,11 +168,15 @@ static int api__headers_complete_cb(http_parser * parser)
 
     assert (!ar->buf);
 
-    ar->buf = malloc(parser->content_length);
-    if (ar->buf)
+    if (parser->content_length != ULLONG_MAX)
     {
-        ar->len = parser->content_length;
+        ar->buf = malloc(parser->content_length);
+        if (ar->buf)
+        {
+            ar->len = parser->content_length;
+        }
     }
+
     return 0;
 }
 
@@ -725,18 +729,22 @@ static int api__service_cb(http_parser * parser)
     switch (ar->content_type)
     {
     case SIRI_API_CT_TEXT:
-        return api__plain_response(ar, E415_UNSUPPORTED_MEDIA_TYPE);
+        if (ar->len)
+            return api__plain_response(ar, E415_UNSUPPORTED_MEDIA_TYPE);
+        ar->content_type = SIRI_API_CT_JSON;
+        break;
     case SIRI_API_CT_JSON:
-    {
-        char * dst;
-        size_t dst_n;
-        if (qpjson_json_to_qp(ar->buf, ar->len, &dst, &dst_n))
-            return api__plain_response(ar, E400_BAD_REQUEST);
-        free(ar->buf);
-        ar->buf = dst;
-        ar->len = dst_n;
+        if (ar->len)
+        {
+            char * dst;
+            size_t dst_n;
+            if (qpjson_json_to_qp(ar->buf, ar->len, &dst, &dst_n))
+                return api__plain_response(ar, E400_BAD_REQUEST);
+            free(ar->buf);
+            ar->buf = dst;
+            ar->len = dst_n;
+        }
         break;
-    }
     case SIRI_API_CT_QPACK:
         break;
     }