Browse Source

Merge pull request #759 from davidmoreno/master

Fixes for fortunes test.
Mike Smith 11 years ago
parent
commit
1cbe11b3b0
10 changed files with 69 additions and 31 deletions
  1. 3 3
      onion/Makefile
  2. 15 16
      onion/base_html.c
  3. BIN
      onion/base_html.o
  4. 1 1
      onion/benchmark_config
  5. BIN
      onion/fortunes_html.o
  6. BIN
      onion/hello
  7. 49 10
      onion/hello.c
  8. BIN
      onion/hello.o
  9. BIN
      onion/libonion_static.a
  10. 1 1
      onion/onion

+ 3 - 3
onion/Makefile

@@ -9,15 +9,15 @@ hello: hello.o libonion_static.a base_html.o fortunes_html.o
 	cc hello.o base_html.o fortunes_html.o libonion_static.a -o hello -lpthread `mysql_config --libs` `pkg-config json --libs` -lgnutls -lgcrypt -lrt
 	cc hello.o base_html.o fortunes_html.o libonion_static.a -o hello -lpthread `mysql_config --libs` `pkg-config json --libs` -lgnutls -lgcrypt -lrt
 
 
 clean:
 clean:
-	rm -r *.o hello base_html.c fortunes_html.c
+	rm -fr *.o hello base_html.c fortunes_html.c libonion_static.a onion
+
 
 
-	
 libonion_static.a: onion
 libonion_static.a: onion
 	(cd onion && mkdir -p build && cd build && cmake .. && cd src && make -j4)
 	(cd onion && mkdir -p build && cd build && cmake .. && cd src && make -j4)
 	cp onion/build/src/onion/libonion_static.a .
 	cp onion/build/src/onion/libonion_static.a .
 
 
 onion:
 onion:
-	git clone https://github.com/davidmoreno/onion.git
+	git clone --depth 1 https://github.com/davidmoreno/onion.git
 
 
 otemplate:
 otemplate:
 	(cd onion/build/tools/otemplate/; make)
 	(cd onion/build/tools/otemplate/; make)

+ 15 - 16
onion/base_html.c

@@ -65,43 +65,42 @@ void base_html(onion_dict *context, onion_response *res){
   onion_response_write(res, "<!DOCTYPE html>\n"
   onion_response_write(res, "<!DOCTYPE html>\n"
       "<html>\n"
       "<html>\n"
       "  <head>\n"
       "  <head>\n"
-      "    <meta content=\"text/html; charset=UTF-8\" http-equiv=\"content-type\"/>\n"
-      "    <title>", 116);
-#line 5
+      "    <title>", 43);
+#line 4
   {
   {
-#line 5
+#line 4
     const char *tmp;
     const char *tmp;
-#line 5
+#line 4
     tmp=onion_dict_get(context, "title");
     tmp=onion_dict_get(context, "title");
-#line 5
+#line 4
     if (tmp)
     if (tmp)
-#line 5
+#line 4
       onion_response_write_html_safe(res, tmp);
       onion_response_write_html_safe(res, tmp);
-#line 5
+#line 4
   }
   }
   onion_response_write(res, "</title>\n"
   onion_response_write(res, "</title>\n"
       "  </head>\n"
       "  </head>\n"
       "  <body>\n"
       "  <body>\n"
       "", 28);
       "", 28);
-#line 8
+#line 7
   {
   {
-#line 8
+#line 7
     void (*f)(onion_dict *context, onion_response *res);
     void (*f)(onion_dict *context, onion_response *res);
-#line 8
+#line 7
     f=(void*)onion_dict_get(context, "__block_content__");
     f=(void*)onion_dict_get(context, "__block_content__");
-#line 8
+#line 7
     if (f)
     if (f)
-#line 8
+#line 7
       f(context, res);
       f(context, res);
-#line 8
+#line 7
   }
   }
   onion_response_write(res, "  \n"
   onion_response_write(res, "  \n"
       "  </body>\n"
       "  </body>\n"
       "</html>\n"
       "</html>\n"
       "", 21);
       "", 21);
-#line 11
+#line 10
   if (!has_context)
   if (!has_context)
-#line 11
+#line 10
     onion_dict_free(context);
     onion_dict_free(context);
 #line 1
 #line 1
 }
 }

BIN
onion/base_html.o


+ 1 - 1
onion/benchmark_config

@@ -22,7 +22,7 @@
     "raw": {
     "raw": {
       "setup_file": "setup",
       "setup_file": "setup",
       "db_url": "/db",
       "db_url": "/db",
-      "query_url": "/db?queries=",
+      "query_url": "/queries?queries=",
       "fortune_url": "/fortune",
       "fortune_url": "/fortune",
       "port": 8080,
       "port": 8080,
       "approach": "Realistic",
       "approach": "Realistic",

BIN
onion/fortunes_html.o


BIN
onion/hello


+ 49 - 10
onion/hello.c

@@ -90,6 +90,10 @@ onion_connection_status return_db(MYSQL *db, onion_request *req, onion_response
 	char *error;
 	char *error;
 	const char *nqueries_str=onion_request_get_query(req,"queries");
 	const char *nqueries_str=onion_request_get_query(req,"queries");
 	int queries=(nqueries_str) ? atoi(nqueries_str) : 1;
 	int queries=(nqueries_str) ? atoi(nqueries_str) : 1;
+	if (queries<=0)
+		queries=1;
+	else if (queries>500)
+		queries=500;
 
 
 	json_object *json=json_object_new_object();
 	json_object *json=json_object_new_object();
 	json_object *array=json_object_new_array();
 	json_object *array=json_object_new_array();
@@ -106,19 +110,40 @@ onion_connection_status return_db(MYSQL *db, onion_request *req, onion_response
 		json_object_object_add(obj, "randomNumber", json_object_new_int( atoi(row[1]) ));
 		json_object_object_add(obj, "randomNumber", json_object_new_int( atoi(row[1]) ));
 		//json_object_array_add(array, obj);
 		//json_object_array_add(array, obj);
 
 
-		if (queries > 1){
-			json_object_array_add(array, obj);
-		}
-		else {
-			json = obj;
-		}
+		json_object_array_add(array, obj);
 
 
 		mysql_free_result(sqlres);
 		mysql_free_result(sqlres);
 	}
 	}
-	if (queries > 1){
-		json = array;
-	}
+	json = array;
+
+	//json_object_object_add(json,"json",array);
+	const char *str=json_object_to_json_string(json);
+	int size=strlen(str);
+	onion_response_set_header(res,"Content-Type","application/json");
+	onion_response_set_length(res, size);
+	onion_response_write(res, str, size);
+	
+	json_object_put(json);
+	return OCS_PROCESSED;
+}
+
+onion_connection_status return_one_db(MYSQL *db, onion_request *req, onion_response *res){
+	char query[256];
+	char *error;
+
+	json_object *json=json_object_new_object();
+		
+	snprintf(query,sizeof(query), "SELECT * FROM World WHERE id = %d", 1 + (rand()%10000));
+	mysql_query(db, query);
+	MYSQL_RES *sqlres = mysql_store_result(db);
+	MYSQL_ROW row = mysql_fetch_row(sqlres);
+		
+	json_object_object_add(json, "id", json_object_new_int( atoi(row[0]) ));
+	json_object_object_add(json, "randomNumber", json_object_new_int( atoi(row[1]) ));
+
+	mysql_free_result(sqlres);
 	//json_object_object_add(json,"json",array);
 	//json_object_object_add(json,"json",array);
+
 	const char *str=json_object_to_json_string(json);
 	const char *str=json_object_to_json_string(json);
 	int size=strlen(str);
 	int size=strlen(str);
 	onion_response_set_header(res,"Content-Type","application/json");
 	onion_response_set_header(res,"Content-Type","application/json");
@@ -167,6 +192,14 @@ onion_connection_status return_fortune(MYSQL *db, onion_request *req, onion_resp
 		strncpy(fortune_list.list[fortune_list.count].message,row[1],sizeof(fortune_list.list[fortune_list.count].message));
 		strncpy(fortune_list.list[fortune_list.count].message,row[1],sizeof(fortune_list.list[fortune_list.count].message));
 		fortune_list.count++;
 		fortune_list.count++;
 	}
 	}
+	if (fortune_list.count>=fortune_list.size){
+		fortune_list.size+=fortune_list.size;
+		fortune_list.list=realloc(fortune_list.list, fortune_list.size * sizeof(fortune_list.size));
+	}
+	strncpy(fortune_list.list[fortune_list.count].id,"0",sizeof(fortune_list.list[fortune_list.count].id));
+	strncpy(fortune_list.list[fortune_list.count].message,"Additional fortune added at request time.",sizeof(fortune_list.list[fortune_list.count].message));
+	fortune_list.count++;
+	
 	
 	
 	qsort(fortune_list.list, fortune_list.count, sizeof(fortune_t), (__compar_fn_t)cmp_fortune);
 	qsort(fortune_list.list, fortune_list.count, sizeof(fortune_t), (__compar_fn_t)cmp_fortune);
 	
 	
@@ -178,7 +211,7 @@ onion_connection_status return_fortune(MYSQL *db, onion_request *req, onion_resp
 	int i;
 	int i;
 	for (i=0;i<fortune_list.count;i++){
 	for (i=0;i<fortune_list.count;i++){
 		char nr[16];
 		char nr[16];
-		snprintf(nr,sizeof(nr),"%010d",nr);
+		snprintf(nr,sizeof(nr),"%010d",i);
 		
 		
 		onion_dict *fortune=onion_dict_new();
 		onion_dict *fortune=onion_dict_new();
 		onion_dict_add(fortune, "id", fortune_list.list[i].id, 0);
 		onion_dict_add(fortune, "id", fortune_list.list[i].id, 0);
@@ -250,6 +283,12 @@ onion_connection_status muxer(struct test_data *data, onion_request *req, onion_
 		return return_json_libjson(NULL, req, res);
 		return return_json_libjson(NULL, req, res);
 	
 	
 	if (strcmp(path, "db")==0){
 	if (strcmp(path, "db")==0){
+		MYSQL *db=get_connection(data);
+		int ret=return_one_db(db, req, res);
+		free_connection(data, db);
+		return ret;
+	}
+	if (strcmp(path, "queries")==0){
 		MYSQL *db=get_connection(data);
 		MYSQL *db=get_connection(data);
 		int ret=return_db(db, req, res);
 		int ret=return_db(db, req, res);
 		free_connection(data, db);
 		free_connection(data, db);

BIN
onion/hello.o


BIN
onion/libonion_static.a


+ 1 - 1
onion/onion

@@ -1 +1 @@
-Subproject commit 91fa116cef62abed5fd4286f58bf426c5c1d1c71
+Subproject commit fc8db21f63f2d4d4ff87c28f44b53cb34d0d7fdf