summaryrefslogtreecommitdiff
path: root/automated/linux/nginx-server/nginx-server.sh
blob: 21bbc66623dcca6413d00e73215985bdee4cfafa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
#!/bin/bash
set -o errexit
set -x

THIS_DIR="$(dirname "$(readlink -f "${BASH_SOURCE[0]}")")"
TEST_DEFS_DIR=$(readlink -f "${THIS_DIR}/../../..")
GET_VLAND_IFACE=${TEST_DEFS_DIR}/automated/utils/vland/get_vland_interface.sh

# vlnad name to use
VLAND_NAME=${VLAND_NAME:-vlan_one}
VLAND_IFACE=$($GET_VLAND_IFACE "$VLAND_NAME")

# Do not run tests on more than MAX_CORES cores
# 0 means use all cores
MAX_CORES=${MAX_CORES:-0}

# IP address of the server
SERVER_IP=${SERVER_IP:-192.168.1.4}

# What kind of configuration to use:
#   linux-ip: plain Linux IP stack
#   odp-dpdk: NGiNX with OFP+ODP+DPDK
CONFIG_TYPE=${CONFIG_TYPE:-linux-ip}

function configure_ramdisk {
	local ROOT=/www
	mkdir "$ROOT"
	mount -t tmpfs -o size=1M tmpfs "$ROOT"
	echo "-- Ramdisk created: "
	df -h "$ROOT"
	echo "-- END"
	lava-test-case server_www_ramdisk --result pass

	cat > "$ROOT/index.html" <<-EOF
	<html>
	<head><title>NGiNX test</title></head>
	<body>
	IT WORKS
	</body>
	</html>
	EOF
}

function write_config {
	local cores=${1}
	local config_file=${2:-/etc/nginx/nginx.conf}

	# Simple configuration file for NGiNX
	cat > "$config_file" <<-EOF
	user www-data;
	worker_processes $cores;
	timer_resolution 1s;
	worker_rlimit_nofile 4096;
	error_log /dev/null crit;
	${WRITE_CONFIG_CORE}

	events {
	    worker_connections 1024;
	    ${WRITE_CONFIG_EVENTS}
	}

	http {
	    access_log off;
	    sendfile on;
	    tcp_nopush on;
	    tcp_nodelay on;
	    keepalive_timeout 0;
	    open_file_cache max=10;
	    server {
	        # TODO: investigate backlog value
		${WRITE_CONFIG_LISTEN:-listen 80 default_server;}
	        location / {
	            root /www;
	        }
	    }
	}
	EOF
	echo "-- CONFIG FOR $1:"
	cat "$config_file"
	echo "-- END --"
}

function get_num_real_cores {
	local cores_socket
	local num_sockets
	local num_cores

	cores_socket=$(lscpu | awk -F : '/^Core\(s\) per/ {print $2;}')
	num_sockets=$(lscpu | awk -F : '/^Socket\(s\)/ {print $2;}')
	num_cores=$((cores_socket * num_sockets))

	if [ "${MAX_CORES}" -ne 0 ] && [ "${num_cores}" -gt "${MAX_CORES}" ]; then
		num_cores=$MAX_CORES
	fi
	echo "$num_cores"
}

test_functions="${THIS_DIR}/${CONFIG_TYPE}.sh"

if [ ! -f "$test_functions" ]; then
	echo "Invalid CONFIG_TYPE: $CONFIG_TYPE"
	exit 1
fi

echo "-- Sourcing $test_functions" >&2

# shellcheck disable=SC1090
. "$test_functions"

do_configure_system "$(get_num_real_cores)" "$VLAND_IFACE" "$SERVER_IP"

NUM_CORES=$(get_num_real_cores)
echo ">> SEND num_cores cores=$NUM_CORES"
lava-send num_cores cores="$NUM_CORES"

echo "<< WAIT client_ready"
lava-wait client_ready

for num_cores in 1 $(seq 2 2 "$NUM_CORES"); do
	echo "-- BEGIN $num_cores"
	echo "-- Stopping NGiNX"
	do_stop_nginx
	echo "-- Writing configuration file for $num_cores"
	do_write_nginx_config "$num_cores" "$VLAND_IFACE" "$SERVER_IP"
	echo "-- CALLING PRE-TEST CALLBACK $PRE_TEST_CB"
	do_pre_test_cb "$num_cores" "$VLAND_IFACE" "$SERVER_IP"
	echo "-- STARTING NGiNX for test $num_cores"
	do_start_nginx
	echo ">> SEND server_num_cores_${num_cores}_ready"
	lava-send "server_num_cores_${num_cores}_ready"
	echo "<< WAIT client_num_cores_${num_cores}_done"
	lava-wait "client_num_cores_${num_cores}_done"
	echo "-- CALLING POST-TEST CALLBACK $POST_TEST_CB"
	do_post_test_cb "$num_cores" "$VLAND_IFACE" "$SERVER_IP"
	echo "-- END $num_cores"
done

do_stop_nginx

echo "<< WAIT client_done"
lava-wait client_done
echo "A10"