mirror of
https://github.com/oliverschmidt/contiki.git
synced 2024-12-22 10:30:13 +00:00
added simple test template
This commit is contained in:
parent
b67baa7dfc
commit
a147db8cc5
143
tools/chakana/test_template/run_test.py
Normal file
143
tools/chakana/test_template/run_test.py
Normal file
@ -0,0 +1,143 @@
|
||||
#!/usr/bin/python
|
||||
|
||||
import errno
|
||||
import optparse
|
||||
import os
|
||||
import re
|
||||
import socket
|
||||
import sys
|
||||
import time
|
||||
|
||||
sys.path[:0] = [(os.path.join(os.path.dirname(sys.argv[0]), "../.."))]
|
||||
|
||||
import chakana.threads
|
||||
import chakana.event
|
||||
import chakana.harness
|
||||
import chakana.utils
|
||||
|
||||
from chakana.debug import *
|
||||
|
||||
def main(argv):
|
||||
sys.stdout = chakana.utils.UnbufferedFile(sys.stdout)
|
||||
make_option = optparse.make_option
|
||||
parser = optparse.OptionParser(
|
||||
usage = os.path.basename(argv[0]) +
|
||||
""" [options]""",
|
||||
option_list = [
|
||||
make_option("-c", "--cooja-timeout", action = "store", type = "int",
|
||||
default = 300,
|
||||
help = "Timeout waiting for COOJA to start"),
|
||||
make_option("-q", "--quiet", action = "count", default = 0,
|
||||
help = "Decrease verbosity"),
|
||||
make_option("-t", "--timeout", action = "store", type = "int",
|
||||
default = 3600,
|
||||
help = "Timeout before aborting the whole test"),
|
||||
make_option("-v", "--verbose", action = "count", default = 0,
|
||||
help = "Increase verbosity"),
|
||||
make_option("-s", "--showCOOJA", action = "store", type = "str",
|
||||
default = "False",
|
||||
help = "Show COOJA GUI"),
|
||||
make_option("-x", "--compileCOOJA", action = "store", type = "str",
|
||||
default = "True",
|
||||
help = "Compile COOJA before test"),
|
||||
])
|
||||
(options, args) = parser.parse_args(argv)
|
||||
debugStream.increaseLevel(options.verbose - options.quiet)
|
||||
debugStream.cleanLog()
|
||||
debugStream.pushTransformer(threadPrefix)
|
||||
|
||||
testDir = os.path.dirname(argv[0])
|
||||
chakanaRoot = os.path.join(testDir, "..")
|
||||
harness = chakana.harness.Harness(chakanaRoot, options.cooja_timeout, doCompile=options.compileCOOJA, withGUI=options.showCOOJA)
|
||||
|
||||
|
||||
## TEST START ##
|
||||
# Start test examples:
|
||||
# > ./run_test.py
|
||||
# > ./run_test.py -v 1
|
||||
# > ./run_test.py -v 1 --compileCOOJA=False --showCOOJA=True
|
||||
|
||||
|
||||
|
||||
# Test configuration (read from file?)
|
||||
totalSimulationRuns = 5
|
||||
randomSeed = 12345 # Initial random seed
|
||||
logFilename = "test.log"
|
||||
logFile = open(logFilename, 'w')
|
||||
debug(MajorEvent, "Configuration read")
|
||||
|
||||
# Create log file
|
||||
title = 'TEST STARTED AT: ' + time.asctime(time.localtime(time.time()))
|
||||
logFile.write(title + '\n')
|
||||
logFile.write(''.zfill(len(title)).replace("0", "-") + '\n\n')
|
||||
logFile.write('Log file: ' + logFilename + '\n')
|
||||
logFile.write('Simulation runs: ' + str(totalSimulationRuns) + '\n')
|
||||
logFile.write('Initial random seed: ' + str(randomSeed) + '\n')
|
||||
logFile.write('\n')
|
||||
logFile.close()
|
||||
debug(MajorEvent, "Log file created")
|
||||
|
||||
try:
|
||||
try:
|
||||
nrSimulationRuns = 0
|
||||
while nrSimulationRuns < totalSimulationRuns:
|
||||
|
||||
## TEST RUN START ##
|
||||
|
||||
# If not the first test run, shut down COOJA
|
||||
if nrSimulationRuns > 0:
|
||||
harness.quit()
|
||||
harness.waitForAllThreads(options.timeout)
|
||||
randomSeed = randomSeed + 1
|
||||
debug(MajorEvent, "Simulation removed and COOJA shut down")
|
||||
|
||||
# Log current test run
|
||||
nrSimulationRuns = nrSimulationRuns + 1
|
||||
logFile = open(logFilename, 'a')
|
||||
logFile.write('\nTest run: ' + str(nrSimulationRuns) + '\n')
|
||||
logFile.write('Random seed: ' + str(randomSeed) + '\n')
|
||||
logFile.close()
|
||||
|
||||
# Start COOJA
|
||||
# This may include compiling COOJA
|
||||
harness.start()
|
||||
shepherd = harness.shepherd()
|
||||
|
||||
# Create new simulation from stripped COOJA simulation config
|
||||
# The XML contents are generated by creating a simulation in COOJA,
|
||||
# saving it to file (.csc), and finally extracting the simulation specifics.
|
||||
xmlContent = chakana.utils.readFile(os.path.join(testDir, "simple_simulation.csc"))
|
||||
xmlContent = xmlContent.replace("[RANDOMSEED]", str(randomSeed))
|
||||
shepherd.loadConfigurationXML(xmlContent)
|
||||
debug(MajorEvent, "COOJA started, and simulation created")
|
||||
|
||||
# Create and wait for a simple time monitor (100 sec)
|
||||
def waitTime(monitor, delay=1000):
|
||||
startTime = shepherd.getSimulationInfo(type = "time")
|
||||
debug(MajorEvent, "Waiting " + str(delay) + " ms, starting at " + str(startTime))
|
||||
monitor.waitFor(chakana.event.TimeEventpoint(shepherd, startTime + delay))
|
||||
debug(MajorEvent, "Waiting finished at " + str(startTime + delay))
|
||||
|
||||
waitMon = shepherd.newMonitor(waitTime, 100000)
|
||||
waitMon.startMonitor()
|
||||
waitMon.waitMonitor()
|
||||
|
||||
logFile = open(logFilename, 'a')
|
||||
logFile.write('Test run ended\n')
|
||||
logFile.close()
|
||||
|
||||
## TEST RUN END ##
|
||||
|
||||
except:
|
||||
debug(Debug, "Exception detected:\n" + exceptionDump(sys.exc_info()))
|
||||
harness.killAllProcesses()
|
||||
raise
|
||||
|
||||
finally:
|
||||
harness.quit()
|
||||
harness.waitForAllThreads(options.timeout)
|
||||
debug(MajorEvent, "Simulation removed and COOJA shut down")
|
||||
harness.waitForAllThreads(options.timeout)
|
||||
|
||||
if __name__ == "__main__":
|
||||
sys.exit(main(sys.argv))
|
13
tools/chakana/test_template/simple_simulation.csc
Normal file
13
tools/chakana/test_template/simple_simulation.csc
Normal file
@ -0,0 +1,13 @@
|
||||
<title>A very simple simulation</title>
|
||||
<delaytime>0</delaytime>
|
||||
<ticktime>1</ticktime>
|
||||
<randomseed>[RANDOMSEED]</randomseed>
|
||||
<nrticklists>1</nrticklists>
|
||||
<motedelay>0</motedelay>
|
||||
<radiomedium>
|
||||
se.sics.cooja.radiomediums.UDGM
|
||||
<transmitting_range>50.0</transmitting_range>
|
||||
<interference_range>100.0</interference_range>
|
||||
<using_random>false</using_random>
|
||||
</radiomedium>
|
||||
|
Loading…
Reference in New Issue
Block a user