CAN bus tests
[src/qa-testdefinitions.git] / common / scripts / test_can_bitrate.sh
diff --git a/common/scripts/test_can_bitrate.sh b/common/scripts/test_can_bitrate.sh
new file mode 100755 (executable)
index 0000000..6802714
--- /dev/null
@@ -0,0 +1,185 @@
+#!/bin/sh
+
+#This test is writen taking the DRA7xx-EVM board as an example
+#Theorical values of bitrate is from 1Kbit/s to 1Mbit/s
+#Real values to provide transmission are between 10797 bit/s and 1909090git bit/s
+#Real values that doesn't provide transmission but belong to the domain are between 781 bit/s and 5209999 bit/s
+
+if [ ! -e /sys/class/net/can1 ];then
+       lava-test-case canconfig_can0_bitrate --result skip
+       lava-test-case receive_frames_through_can1 --result skip
+       lava-test-case receive_frames_through_can1 --result skip
+       lava-test-case receive_frames_through_can1 --result skip
+       lava-test-case canconfig_can0_bitrate --result skip
+       lava-test-case receive_frames_through_can1 --result skip
+       exit 0
+fi
+
+#This is the first part of the test, that tests if the bitrate inserted belongs to the domain and if
+#this first bitrate afford frames transmission or not
+canconfig can0 stop
+if [ $? -eq 0 ];then
+        lava-test-case stop_can0 --result pass
+else
+        lava-test-case stop_can0 --result fail
+fi
+sleep 2
+canconfig can1 stop
+if [ $? -eq 0 ];then
+        lava-test-case stop_can1 --result pass
+else
+        lava-test-case stop_can1 --result fail
+fi
+sleep 2
+
+# b refers to bitrate
+
+found_bitrate=0
+for b in `seq 778 790`;do
+       canconfig can0 bitrate $b
+       x=$?
+       if [ $x -eq 0 ];then
+               lava-test-case can0_bitrate --result pass --measurement $b --units bit/s
+               echo "$b is the first bitrate in the domain"
+               found_bitrate=1
+               canconfig can1 bitrate $b
+               if [ $? -eq 0 ];then
+                       lava-test-case can1_bitrate --result pass --measurement $b --units bit/s
+               else
+                       lava-test-case can1_bitrate --result fail --measurement $b --units bit/s
+               fi
+               sleep 2
+               canconfig can0 start
+               if [ $? -eq 0 ];then
+                       lava-test-case start_can0 --result pass
+               else
+                       lava-test-case start_can0 --result fail
+               fi
+               sleep 2
+               canconfig can1 start
+               if [ $? -eq 0 ];then
+                       lava-test-case start_can1 --result pass
+               else
+                       lava-test-case start_can1 --result fail
+               fi
+               sleep 2
+               file_can=$(mktemp)
+               cansequence -p can0 &
+               candump can1 > $file_can &
+               sleep 3
+               if [ -s $file_can ];then
+                       lava-test-case Receive_can1 --result pass --measurement $b --units bit/s
+               else
+                       lava-test-case Receive_can1 --result fail --measurement $b --units bit/s
+                       sleep 2
+                       echo "This bitrate $b belongs to the domain but doesn't provide frames transmission"
+                       break
+               fi
+               rm $file_can
+       fi
+done
+
+if [ $found_bitrate -eq 0 ];then
+       lava-test-case can0_bitrate --result fail --measurement $b --units bit/s
+       sleep 2
+       echo "There is no supportable bitrate in this interval"
+fi
+canconfig can0 stop
+canconfig can1 stop
+sleep 2
+#This is the second part of the test, it tests the first bitrate to provide frames transmission
+
+canconfig can0 stop
+canconfig can1 stop
+found_bitrate_for_transmisson=0
+for b in `seq 10790 10800`;do
+        canconfig can0 bitrate $b
+        canconfig can1 bitrate $b
+        canconfig can0 start
+        canconfig can1 start
+        sleep 3
+        file_can=$(mktemp)
+       cansequence -p can0 &
+       candump can1 > $file_can &
+       sleep 4
+        if [ -s $file_can ];then
+               found_bitrate_for_transmisson=1
+               lava-test-case Receive_can1 --result pass --measurement $b --units bit/s
+               sleep 2
+               echo "$b is the first supportable bitrate to provide transmission"
+               break
+       fi
+       canconfig can0 stop
+       canconfig can1 stop
+       rm $file_can
+done
+
+if [ $found_bitrate_for_transmisson -eq 0 ];then
+       lava-test-case Receive_can1 --result fail --measurement $b --units bit/s
+       sleep 2
+       echo "There is no bitrate in this interval to provide frames transmission"
+fi
+
+
+#This is the third part of the test, it tests the last bitrate to provide frames transmission
+
+canconfig can0 stop
+canconfig can1 stop
+bitrate_no_transmission=0
+for b in `seq 1909088 1909092`;do
+        canconfig can0 bitrate $b
+        canconfig can1 bitrate $b
+        canconfig can0 start
+        canconfig can1 start
+        sleep 2
+        file_can=$(mktemp)
+        cansequence -p can0 &
+        candump can1 > $file_can &
+        sleep 3
+       size=$(stat -c %s $file_can)
+       if [ $size -eq 0 ];then
+               bitrate_no_transmission=1
+               B=($b-1)
+               lava-test-case Receive_can1 --result pass --measurement $B --units bit/s
+               lava-test-case Receive_can1 --result fail --measurement $b --units bit/s
+               sleep 2
+               echo "This bitrate $b doesn't provide frames transmission"
+               echo "The last bitrate to provide frames transmission is $(($b-1))"
+               break
+       fi
+       canconfig can0 stop
+       canconfig can1 stop
+        rm $file_can
+done
+
+if [ $bitrate_no_transmission -eq 0 ];then
+       lava-test-case Receive_can1 --result pass --measurement $b --units bit/s
+       echo "All bitrates in this interval provide frames transmission"
+       canconfig can0 stop
+       canconfig can1 stop
+fi
+
+#This is the last part of the test, it tests the last bitrate that belongs to the domain
+sleep 3
+canconfig can0 stop
+canconfig can1 stop
+out_of_domain=0
+for b in `seq 5290999 5291000`;do
+       canconfig can0 bitrate $b
+       x=$?
+       sleep 2
+       if [ $x -ne 0 ];then
+               out_of_domain=1
+               lava-test-case can0_bitrate --result fail --measurement $b --units bit/s
+               echo "$b is the first bitrate to be out of the domain"
+               echo "The last bitrate to belong to the domain is $(($b-1))"
+               break
+       fi
+done
+
+if [ $out_of_domain -eq 0 ];then
+       lava-test-case can0_bitrate --result pass --measurement $b --units bit/s
+       echo "All bitrates in this interval belong to the domain"
+       canconfig can0 stop
+       canconfig can1 stop
+fi