diff --git a/scripts/run_all_tests.sh b/scripts/run_all_tests.sh
new file mode 100644
index 0000000..4bb9d26
--- /dev/null
+++ b/scripts/run_all_tests.sh
@@ -0,0 +1,4 @@
+bash run_test.sh 172.16.52.108 test37 172.16.55.2 disk_io_perf.pem
+bash run_test.sh 172.16.52.108 test37 172.16.55.2 disk_io_perf.pem
+bash run_test.sh 172.16.52.108 test37 172.16.55.2 disk_io_perf.pem
+bash run_test.sh 172.16.52.108 test37 172.16.55.2 disk_io_perf.pem
\ No newline at end of file
diff --git a/scripts/run_test.sh b/scripts/run_test.sh
new file mode 100644
index 0000000..483f583
--- /dev/null
+++ b/scripts/run_test.sh
@@ -0,0 +1,127 @@
+FUEL_MASTER_IP=$1
+FUEL_MASTER_PASSWD=$2
+EXTERNAL_IP=$3
+KEY_FILE_NAME=$4
+
+if [ ! -z $5 ]
+then
+    FILE_TO_TEST=$5
+else
+    FILE_TO_TEST="bbb.txt"
+fi
+
+if [ ! -z $6 ]
+then
+    FILE_TO_STORE_RESULTS=$6
+else
+    FILE_TO_STORE_RESULTS="aaa.txt"
+fi
+
+if [ ! -z $7 ]
+then
+    TIMEOUT=$7
+else
+    TIMEOUT=60
+fi
+
+
+echo "Fuel master IP: $FUEL_MASTER_IP"
+echo "Fuel master password: $FUEL_MASTER_PASSWD"
+echo "External IP: $EXTERNAL_IP"
+echo "Key file name: $KEY_FILE_NAME"
+
+# note : function will works properly only when image dame is single string without spaces that can brake awk
+function wait_image_active() {
+	image_state="none"
+	image_name=$IMAGE_NAME
+    counter=0
+
+	while [ $image_state != "active" ] ; do
+		sleep 1
+		image_state=$(glance image-list | grep $image_name | awk '{print $12}')
+		echo $image_state
+		counter=$((counter + 1))
+
+		if [ $counter -eq $TIMEOUT ]
+        then
+            echo "Time limit exceed"
+            break
+        fi
+	done
+}
+
+
+function wait_floating_ip() {
+    sleep 10
+	floating_ip="|"
+	vm_name=$VM_NAME
+    counter=0
+
+	while [ $floating_ip != "|" ] ; do
+		sleep 1
+		floating_ip=$(nova floating-ip-list | grep $vm_name | awk '{print $13}' | head -1)
+		counter=$((counter + 1))
+
+		if [ $counter -eq $TIMEOUT ]
+        then
+            echo "Time limit exceed"
+            break
+        fi
+	done
+}
+
+
+function wait_vm_deleted() {
+	vm_name=$(nova list| grep $VM_NAME| awk '{print $4}'| head -1)
+    counter=0
+
+	while [ ! -z $vm_name ] ; do
+		sleep 1
+		vm_name=$(nova list| grep $VM_NAME| awk '{print $4}'| head -1)
+		counter=$((counter + 1))
+
+		if [ $counter -eq $TIMEOUT ]
+        then
+            echo "Time limit exceed"
+            break
+        fi
+	done
+}
+
+source run_vm.sh $FUEL_MASTER_IP $FUEL_MASTER_PASSWD $EXTERNAL_IP
+source `get_openrc`
+list=$(nova list)
+if [ "$list" == "" ]; then
+    echo "openrc variables are unset or set to the empty string"
+fi
+
+IP=$(nova floating-ip-list | grep $FLOATING_NET | awk '{if ($5 == "-") print $2}' | head -n1)
+
+if [ -z $IP ]; then
+    IP=$(nova floating-ip-create net04_ext| awk '{print $2}')
+
+    if [ -z $list ]; then
+        echo "Cannot allocate new floating ip"
+    fi
+fi
+
+VM_IP=$IP
+echo "VM IP: $VM_IP"
+
+# sends images to glance
+bash prepare.sh
+wait_image_active
+echo "Image has been saved"
+VOL_ID=$(boot_vm)
+echo "VM has been booted"
+wait_floating_ip
+echo "Floating IP has been obtained"
+source `prepare_vm`
+echo "VM has been prepared"
+ssh -i $KEY_FILE_NAME ubuntu@$VM_IP \
+    "cd /tmp/io_scenario; sudo bash ../single_node_test_short.sh $FILE_TO_TEST $FILE_TO_STORE_RESULTS"
+nova delete $VM_NAME
+wait_vm_deleted
+echo "$VM_NAME has been deleted successfully"
+cinder delete $VOL_ID
+echo "Volume has been deleted $VOL_ID"
diff --git a/scripts/run_vm.sh b/scripts/run_vm.sh
index f93e475..94a39ea 100644
--- a/scripts/run_vm.sh
+++ b/scripts/run_vm.sh
@@ -1,21 +1,21 @@
 #!/bin/bash
 MASTER_IP=$1
 FUEL_PASSWD=$2
+NEW_IP=$3
+VM_NAME=disk-io-test
 
 # VM_IP=$(nova floating-ip-create "$FLOATIN_NET" | grep "$FLOATIN_NET" | awk '{print $2}')
-VM_IP=172.16.53.16
-OS_ORIGIN_IP=192.168.0.2
-OS_EXT_IP=172.16.53.2
-VM_NAME=koder-disk-test
+VM_IP=172.16.55.14
+OS_ORIGIN_IP=10.20.0.129
+OS_EXT_IP=172.16.53.66
 
-# FIXED_NET_NAME="net04"
-FIXED_NET_NAME="novanetwork"
+
+
+FIXED_NET_NAME="net04"
 FLOATING_NET="net04_ext"
 
-# my_dir="$(dirname "$0")"
-# source "$my_dir/config.sh"
-source config.sh
-
+my_dir="$(dirname -- "$0")"
+source "$my_dir/config.sh"
 SSH_OVER_MASTER="sshpass -p${FUEL_PASSWD} ssh root@${MASTER_IP}"
 VOLUME_NAME="test-volume"
 VOLUME_SIZE=20
@@ -25,35 +25,55 @@
 function get_openrc() {
 	OPENRC=`tempfile`
 	CONTROLLER_NODE=$($SSH_OVER_MASTER fuel node | grep controller | awk '-F|' '{gsub(" ", "", $5); print $5}')
-	$SSH_OVER_MASTER ssh $CONTROLLER_NODE cat openrc 2>/dev/null | sed "s/$OS_ORIGIN_IP/$OS_EXT_IP/g" > $OPENRC
+	$SSH_OVER_MASTER ssh $CONTROLLER_NODE cat openrc 2>/dev/null | \
+	    sed -r 's/(\b[0-9]{1,3}\.){3}[0-9]{1,3}\b'/$NEW_IP/ > $OPENRC
 	echo $OPENRC
 }
 
 function wait_vm_active() {
 	vm_state="none"
-	vm_name=$1
+	vm_name=$VM_NAME
+    counter=0
 
-	while [ "$vm_state" != "ACTIVE" ] ; do
+	while [ $vm_state != "ACTIVE" ] ; do
 		sleep 1
 		vm_state=$(nova list | grep $vm_name | awk '{print $6}')
+		counter=$((counter + 1))
+
+		if [ $counter -eq $TIMEOUT ]
+        then
+            echo "Time limit exceed"
+            break
+        fi
 	done
 }
 
 function boot_vm() {
 	FIXED_NET_ID=$(nova net-list | grep "\b${FIXED_NET_NAME}\b" | awk '{print $2}')
-	VOL_ID=$(cinder create --display-name $VOLUME_NAME $VOLUME_SIZE | grep '\bid\b' | awk '{print $4}')
+	VOL_ID=$(cinder create --display-name $VOLUME_NAME $VOLUME_SIZE | grep '\bid\b' | grep available | awk '{print $4}')
+
+    if [ -z $VOL_ID ]; then
+        VOL_ID=$(cinder list | grep test-volume | grep available| awk '{print $2}'| head -1)
+    fi
+
 	nova boot --flavor "$FLAVOR_NAME" --image "$IMAGE_NAME" --key-name "$KEYPAIR_NAME" --security-groups default --nic net-id=$FIXED_NET_ID $VM_NAME >/dev/null
 	wait_vm_active $VM_NAME
 
 	nova floating-ip-associate $VM_NAME $VM_IP
+
 	nova volume-attach $VM_NAME $VOL_ID $VOLUME_DEVICE >/dev/null
+	echo $VOL_ID
 }
 
 function prepare_vm() {
 	scp -i "$KEY_FILE_NAME" -r ../io_scenario ubuntu@${VM_IP}:/tmp >/dev/null
+	echo "Copy io scenario folded"
 	scp -i "$KEY_FILE_NAME" $DEBS ubuntu@${VM_IP}:/tmp >/dev/null
+	echo "Copy DEBS packages"
 	scp -i "$KEY_FILE_NAME" single_node_test_short.sh ubuntu@${VM_IP}:/tmp >/dev/null
+	echo "Copy single_node_test_short"
 	ssh -i "$KEY_FILE_NAME" ubuntu@${VM_IP} sudo dpkg -i $DEBS >/dev/null
+    echo "dpkg on vm"
 }
 
 function prepare_node() {
