From 998a16ad189481ec9462d0b5550e65cec0c34f09 Mon Sep 17 00:00:00 2001 From: "r.kubiak" Date: Thu, 8 Oct 2015 16:22:55 +0200 Subject: [PATCH] Added performance test scripts and programs Change-Id: Iaf497786d993e98e6020290e0c5cb33af1461e23 --- tests/Makefile | 4 ++ tests/gen_cynara.sh | 10 +++ tests/gen_labels.sh | 10 +++ tests/gen_rules.sh | 10 +++ tests/load_cynara.sh | 13 ++++ tests/load_rules.sh | 9 +++ tests/smack_net_test.c | 162 +++++++++++++++++++++++++++++++++++++++++++++++++ 7 files changed, 218 insertions(+) create mode 100644 tests/Makefile create mode 100755 tests/gen_cynara.sh create mode 100755 tests/gen_labels.sh create mode 100755 tests/gen_rules.sh create mode 100755 tests/load_cynara.sh create mode 100755 tests/load_rules.sh create mode 100644 tests/smack_net_test.c diff --git a/tests/Makefile b/tests/Makefile new file mode 100644 index 0000000..102df9c --- /dev/null +++ b/tests/Makefile @@ -0,0 +1,4 @@ +all: + gcc -Og smack_net_test.c -o smack_net_test + + \ No newline at end of file diff --git a/tests/gen_cynara.sh b/tests/gen_cynara.sh new file mode 100755 index 0000000..c44e0b6 --- /dev/null +++ b/tests/gen_cynara.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ "$1" == "" ]; then + echo "$0 " + exit 1 +fi + +for i in `cat $1`; do + echo "MANIFESTS;$i;0;http://tizen.org/privilege/internet;65535;" +done diff --git a/tests/gen_labels.sh b/tests/gen_labels.sh new file mode 100755 index 0000000..cbb23e9 --- /dev/null +++ b/tests/gen_labels.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ "$1" == "" ]; then + echo "$0 " + exit 1 +fi + +for i in `seq 0 $1`; do + echo "AppLabel$i" +done diff --git a/tests/gen_rules.sh b/tests/gen_rules.sh new file mode 100755 index 0000000..6d57e1b --- /dev/null +++ b/tests/gen_rules.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [ "$1" == "" ]; then + echo "$0 " + exit 1 +fi + +for i in `cat $1`; do + cat rules_template.txt | sed 's/APP_ID/'$i'/g' +done \ No newline at end of file diff --git a/tests/load_cynara.sh b/tests/load_cynara.sh new file mode 100755 index 0000000..875af31 --- /dev/null +++ b/tests/load_cynara.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +if [ "$1" == "" ] || [ "$2" == "" ]; then + echo "$0 " + exit 1 +fi + +for i in `cat $1`; do + echo "remove $i" + cyad -e $2 -r no -c $i -u 0 -p http://tizen.org/privilege/internet + echo "add $1" + cyad -s $2 -c $i -u 0 -p http://tizen.org/privilege/internet -t allow +done diff --git a/tests/load_rules.sh b/tests/load_rules.sh new file mode 100755 index 0000000..adbdce6 --- /dev/null +++ b/tests/load_rules.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +if [ "$1" == "" ]; then + echo "$0 " + exit 1 +fi + +echo "Loading rules" +cat $1 | grep --line-buffered "" > /sys/fs/smackfs/load2 diff --git a/tests/smack_net_test.c b/tests/smack_net_test.c new file mode 100644 index 0000000..b4b691e --- /dev/null +++ b/tests/smack_net_test.c @@ -0,0 +1,162 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define MAX_SAMPLES 100000 +#define MAX_LABELS 10000 +#define MAX_LABEL 255 + +char labels[MAX_LABELS][MAX_LABEL]; + +int change_label(const int n) +{ + FILE *fp = fopen ("/proc/self/attr/current", "w"); + + if (fp == NULL) + { + perror("/proc/self/attr/current"); + return (1); + } + + if (fwrite (labels[n], strlen(labels[n]), 1, fp) == 0) + { + perror("/proc/self/attr/current"); + fclose(fp); + return (1); + } + + fclose (fp); + return (0); +} + +int read_labels(const char *labels_file) +{ + FILE *fp = fopen(labels_file, "r"); + int nl = 0; + + if (fp == NULL) + { + perror(labels_file); + return (1); + } + + while (!feof(fp)) + { + if (fgets(labels[nl++], MAX_LABEL, fp) == NULL) + { + printf ("Read %d labels\n", nl); + break; + } + } + + fclose(fp); + return (0); +} + +int con(const char *ip, const int n) +{ + int sockfd = 0; + struct sockaddr_in serv_addr; + + if((sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) + { + perror("socket"); + return 1; + } + + memset(&serv_addr, '0', sizeof(serv_addr)); + + serv_addr.sin_family = AF_INET; + serv_addr.sin_port = htons(80); + + if(inet_pton(AF_INET, ip, &serv_addr.sin_addr) <= 0) + { + perror("inet_pton"); + return 1; + } + + if(connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) + { + perror ("connect"); + return 1; + } + + close (sockfd); + + return (0); +} + +int main(int argc, char *argv[]) +{ + int n = 0, conn_all = 0, avg_n = 0; + long avg_every = 0; + long avg_samples[MAX_SAMPLES] = {0}; + long elapsed_samples[MAX_SAMPLES] = {0}; + unsigned long avg_accumulator = 0; + struct timespec tp_start, tp_end; + + if(argc != 5) + { + printf("Usage: %s \n", argv[0]); + return (1); + } + + if (read_labels(argv[4])) + { + printf("Can't read labels %s\n", argv[4]); + return (1); + } + + conn_all = atol(argv[2]); + avg_every = atol(argv[3]); + + for (n = 0; n < conn_all; n++) + { + if (change_label(n)) + { + printf ("change_label failed\n"); + return (1); + } + + clock_gettime (CLOCK_REALTIME, &tp_start); + + if (con(argv[1], n)) + { + printf ("con() failed\n"); + return (1); + } + + clock_gettime (CLOCK_REALTIME, &tp_end); + + elapsed_samples[n] = tp_end.tv_nsec - tp_start.tv_nsec; + avg_accumulator += elapsed_samples[n]; + + if (avg_n++ == avg_every) + { + avg_n = 0; + avg_samples[n] = avg_accumulator / avg_every; + + if (avg_samples[n] < 0) + { + printf ("Bad avg: start:%u end:%u diff:%u accumulator:%u div:%u\n", tp_start.tv_nsec, tp_end.tv_nsec, tp_end.tv_nsec - tp_start.tv_nsec, avg_accumulator, avg_accumulator / avg_every); + } + avg_accumulator = 0; + + + + printf ("Average over %d samples %.4f ms\n", avg_every, avg_samples[n]/1000000.0f); + } + + + } + + return (0); +} -- 2.7.4