add: tests
This commit is contained in:
		
							parent
							
								
									dd98af4edc
								
							
						
					
					
						commit
						be045f59d4
					
				
					 11 changed files with 257 additions and 30 deletions
				
			
		
							
								
								
									
										3
									
								
								.gitignore
									
										
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								.gitignore
									
										
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -1,4 +1,7 @@
 | 
			
		|||
build/
 | 
			
		||||
docs/
 | 
			
		||||
 | 
			
		||||
tests/testing_tmp/
 | 
			
		||||
tests/testing_bak/
 | 
			
		||||
 | 
			
		||||
include/migrations/*.sql.h
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -23,11 +23,11 @@ aux_source_directory(. SRC_DIR)
 | 
			
		|||
aux_source_directory(models MODELS_SRC)
 | 
			
		||||
aux_source_directory(helpers HELPERS_SRC)
 | 
			
		||||
aux_source_directory(handlers HANDLERS_SRC)
 | 
			
		||||
aux_source_directory(endpoints ENDPOINTSS_SRC)
 | 
			
		||||
aux_source_directory(endpoints ENDPOINTS_SRC)
 | 
			
		||||
 | 
			
		||||
configure_file("core.ini" "core.ini" COPYONLY)
 | 
			
		||||
 | 
			
		||||
target_sources(core PRIVATE ${VENDOR_SRC} ${SRC_DIR} ${HANDLERS_SRC} ${HELPERS_SRC} ${MODELS_SRC} ${ENDPOINTSS_SRC})
 | 
			
		||||
target_sources(core PRIVATE ${VENDOR_SRC} ${SRC_DIR} ${HANDLERS_SRC} ${HELPERS_SRC} ${MODELS_SRC} ${ENDPOINTS_SRC})
 | 
			
		||||
target_include_directories(core PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/include)
 | 
			
		||||
target_include_directories(core PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/vendor)
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -57,7 +57,7 @@ add_custom_target(docs
 | 
			
		|||
)
 | 
			
		||||
 | 
			
		||||
add_custom_target(test
 | 
			
		||||
    COMMAND ./run_tests.sh ${CMAKE_BINARY_DIR}/core ${CMAKE_SOURCE_DIR}/core.ini
 | 
			
		||||
    COMMAND ./run_tests.sh ${CMAKE_BINARY_DIR}/core "dev"
 | 
			
		||||
    DEPENDS core
 | 
			
		||||
    WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/tests
 | 
			
		||||
)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -243,6 +243,11 @@ api_v1_controllers_discover_POST(struct mg_connection *c, endpoint_args_t *args,
 | 
			
		|||
                discovered_controller->port = discovered_command_port;
 | 
			
		||||
                discovered_controller->active = 1;
 | 
			
		||||
 | 
			
		||||
                // TODO get relays during discovery
 | 
			
		||||
                relay_t **discovered_relays = malloc(sizeof(relay_t*));
 | 
			
		||||
                discovered_relays[0] = NULL;
 | 
			
		||||
                discovered_controller->relays = discovered_relays;
 | 
			
		||||
 | 
			
		||||
                controller_save(discovered_controller);
 | 
			
		||||
                controller_free(discovered_controller);
 | 
			
		||||
            }
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										56
									
								
								tests/controller.testing.ini
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								tests/controller.testing.ini
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,56 @@
 | 
			
		|||
[controller]
 | 
			
		||||
name = new emgauwa device
 | 
			
		||||
discovery-port = 4422
 | 
			
		||||
relay-count = 10
 | 
			
		||||
database = controller_db.lmdb
 | 
			
		||||
log-level = debug
 | 
			
		||||
 | 
			
		||||
[relay-0]
 | 
			
		||||
driver = piface
 | 
			
		||||
pin = 0
 | 
			
		||||
inverted = 0
 | 
			
		||||
 | 
			
		||||
[relay-1]
 | 
			
		||||
driver = piface
 | 
			
		||||
pin = 1
 | 
			
		||||
inverted = 0
 | 
			
		||||
 | 
			
		||||
[relay-2]
 | 
			
		||||
driver = gpio
 | 
			
		||||
pin = 5
 | 
			
		||||
inverted = 1
 | 
			
		||||
 | 
			
		||||
[relay-3]
 | 
			
		||||
driver = gpio
 | 
			
		||||
pin = 4
 | 
			
		||||
inverted = 1
 | 
			
		||||
 | 
			
		||||
[relay-4]
 | 
			
		||||
driver = gpio
 | 
			
		||||
pin = 3
 | 
			
		||||
inverted = 1
 | 
			
		||||
 | 
			
		||||
[relay-5]
 | 
			
		||||
driver = gpio
 | 
			
		||||
pin = 2
 | 
			
		||||
inverted = 1
 | 
			
		||||
 | 
			
		||||
[relay-6]
 | 
			
		||||
driver = gpio
 | 
			
		||||
pin = 1
 | 
			
		||||
inverted = 1
 | 
			
		||||
 | 
			
		||||
[relay-7]
 | 
			
		||||
driver = gpio
 | 
			
		||||
pin = 0
 | 
			
		||||
inverted = 1
 | 
			
		||||
 | 
			
		||||
[relay-8]
 | 
			
		||||
driver = gpio
 | 
			
		||||
pin = 16
 | 
			
		||||
inverted = 1
 | 
			
		||||
 | 
			
		||||
[relay-9]
 | 
			
		||||
driver = gpio
 | 
			
		||||
pin = 15
 | 
			
		||||
inverted = 1
 | 
			
		||||
							
								
								
									
										5
									
								
								tests/core.testing.ini
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								tests/core.testing.ini
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,5 @@
 | 
			
		|||
[core]
 | 
			
		||||
server-port = 5000
 | 
			
		||||
discovery-port = 4422
 | 
			
		||||
database = core.sqlite
 | 
			
		||||
log-level = debug
 | 
			
		||||
| 
						 | 
				
			
			@ -1,17 +1,46 @@
 | 
			
		|||
#!/usr/bin/env sh
 | 
			
		||||
 | 
			
		||||
mkdir ./testing_tmp
 | 
			
		||||
cd ./testing_tmp
 | 
			
		||||
source_dir=$PWD
 | 
			
		||||
working_dir=$PWD/testing_tmp
 | 
			
		||||
working_bak=$PWD/testing_bak
 | 
			
		||||
 | 
			
		||||
cp $1 ./core
 | 
			
		||||
cp $2 ./core.ini
 | 
			
		||||
rm -rf $working_dir
 | 
			
		||||
mkdir -p $working_dir
 | 
			
		||||
cd $working_dir
 | 
			
		||||
 | 
			
		||||
./core start >/dev/null 2>&1 &
 | 
			
		||||
git clone --quiet ssh://git@git.serguzim.me:3022/emgauwa/controller.git controller || exit
 | 
			
		||||
pushd ./controller > /dev/null
 | 
			
		||||
git checkout $2
 | 
			
		||||
mkdir build
 | 
			
		||||
cd build
 | 
			
		||||
 | 
			
		||||
cmake -DWIRING_PI_DEBUG=on .. >/dev/null
 | 
			
		||||
cp $source_dir/controller.testing.ini ./controller.ini
 | 
			
		||||
make >/dev/null
 | 
			
		||||
./controller start >$working_dir/controller.log 2>&1 &
 | 
			
		||||
controller_id=$!
 | 
			
		||||
popd > /dev/null
 | 
			
		||||
 | 
			
		||||
cp $1 $working_dir/core
 | 
			
		||||
cp $source_dir/core.testing.ini $working_dir/core.ini
 | 
			
		||||
 | 
			
		||||
$working_dir/core start >$working_dir/core.log 2>&1 &
 | 
			
		||||
core_id=$!
 | 
			
		||||
 | 
			
		||||
sleep 2;
 | 
			
		||||
 | 
			
		||||
tavern-ci --tavern-beta-new-traceback ..
 | 
			
		||||
tavern-ci --disable-warnings $source_dir
 | 
			
		||||
test_result=$?
 | 
			
		||||
 | 
			
		||||
kill $core_id
 | 
			
		||||
cd ..
 | 
			
		||||
rm -r ./testing_tmp
 | 
			
		||||
kill $controller_id
 | 
			
		||||
 | 
			
		||||
if [ $test_result -gt 0 ]
 | 
			
		||||
then
 | 
			
		||||
    rm -rf $working_bak
 | 
			
		||||
    mv $working_dir $working_bak
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
rm -rf $working_dir
 | 
			
		||||
 | 
			
		||||
exit $test_result
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
							
								
								
									
										105
									
								
								tests/test_controllers_basic.tavern.yaml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										105
									
								
								tests/test_controllers_basic.tavern.yaml
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,105 @@
 | 
			
		|||
test_name: Test basic controller functions
 | 
			
		||||
 | 
			
		||||
stages:
 | 
			
		||||
- name: "[test_controllers_basic] discover controllers"
 | 
			
		||||
  request:
 | 
			
		||||
    method: POST
 | 
			
		||||
    url: "http://localhost:5000/api/v1/controllers/discover/"
 | 
			
		||||
  response:
 | 
			
		||||
    status_code: 200
 | 
			
		||||
    json:
 | 
			
		||||
    - id: !anystr
 | 
			
		||||
      name: !anystr
 | 
			
		||||
      relay_count: !anyint
 | 
			
		||||
      relays: !anystr
 | 
			
		||||
      active: !anybool
 | 
			
		||||
      port: !anyint
 | 
			
		||||
      ip: !anystr
 | 
			
		||||
      relays: !anylist
 | 
			
		||||
    save:
 | 
			
		||||
      json:
 | 
			
		||||
        returned_name: "[0].name"
 | 
			
		||||
        returned_id: "[0].id"
 | 
			
		||||
 | 
			
		||||
- name: "[test_controllers_basic] get controller, check name"
 | 
			
		||||
  request:
 | 
			
		||||
    method: GET
 | 
			
		||||
    url: "http://localhost:5000/api/v1/controllers/{returned_id}"
 | 
			
		||||
  response:
 | 
			
		||||
    status_code: 200
 | 
			
		||||
    json:
 | 
			
		||||
      name: "{returned_name}"
 | 
			
		||||
      id: "{returned_id}"
 | 
			
		||||
      relay_count: !anyint
 | 
			
		||||
      relays: !anystr
 | 
			
		||||
      active: !anybool
 | 
			
		||||
      port: !anyint
 | 
			
		||||
      ip: !anystr
 | 
			
		||||
      relays: !anylist
 | 
			
		||||
 | 
			
		||||
- name: "[test_controllers_basic] get controller, check name"
 | 
			
		||||
  request:
 | 
			
		||||
    method: PUT
 | 
			
		||||
    url: "http://localhost:5000/api/v1/controllers/{returned_id}"
 | 
			
		||||
    json:
 | 
			
		||||
      name: "renamed_controller"
 | 
			
		||||
  response:
 | 
			
		||||
    status_code: 200
 | 
			
		||||
    json:
 | 
			
		||||
      name: "{tavern.request_vars.json.name}"
 | 
			
		||||
      id: "{returned_id}"
 | 
			
		||||
      relay_count: !anyint
 | 
			
		||||
      relays: !anystr
 | 
			
		||||
      active: true
 | 
			
		||||
      port: !anyint
 | 
			
		||||
      ip: !anystr
 | 
			
		||||
      relays: !anylist
 | 
			
		||||
    save:
 | 
			
		||||
      json:
 | 
			
		||||
        changed_name: "name"
 | 
			
		||||
 | 
			
		||||
- name: "[test_controllers_basic] delete controller"
 | 
			
		||||
  request:
 | 
			
		||||
    method: DELETE
 | 
			
		||||
    url: "http://localhost:5000/api/v1/controllers/{returned_id}"
 | 
			
		||||
  response:
 | 
			
		||||
    status_code: 200
 | 
			
		||||
 | 
			
		||||
- name: "[test_controllers_basic] get controller, expect 404"
 | 
			
		||||
  request:
 | 
			
		||||
    method: GET
 | 
			
		||||
    url: "http://localhost:5000/api/v1/controllers/{returned_id}"
 | 
			
		||||
  response:
 | 
			
		||||
    status_code: 404
 | 
			
		||||
 | 
			
		||||
- name: "[test_controllers_basic] discover controllers again"
 | 
			
		||||
  request:
 | 
			
		||||
    method: POST
 | 
			
		||||
    url: "http://localhost:5000/api/v1/controllers/discover/"
 | 
			
		||||
  response:
 | 
			
		||||
    status_code: 200
 | 
			
		||||
    json:
 | 
			
		||||
    - id: "{returned_id}"
 | 
			
		||||
      name: "{changed_name}"
 | 
			
		||||
      relay_count: !anyint
 | 
			
		||||
      relays: !anystr
 | 
			
		||||
      active: true
 | 
			
		||||
      port: !anyint
 | 
			
		||||
      ip: !anystr
 | 
			
		||||
      relays: !anylist
 | 
			
		||||
 | 
			
		||||
- name: "[test_controllers_basic] get controller again, check name"
 | 
			
		||||
  request:
 | 
			
		||||
    method: GET
 | 
			
		||||
    url: "http://localhost:5000/api/v1/controllers/{returned_id}"
 | 
			
		||||
  response:
 | 
			
		||||
    status_code: 200
 | 
			
		||||
    json:
 | 
			
		||||
      id: "{returned_id}"
 | 
			
		||||
      name: "{changed_name}"
 | 
			
		||||
      relay_count: !anyint
 | 
			
		||||
      relays: !anystr
 | 
			
		||||
      active: true
 | 
			
		||||
      port: !anyint
 | 
			
		||||
      ip: !anystr
 | 
			
		||||
      relays: !anylist
 | 
			
		||||
| 
						 | 
				
			
			@ -1,21 +1,21 @@
 | 
			
		|||
test_name: Test basic get all requests
 | 
			
		||||
test_name: "[get_all] Test basic get all requests"
 | 
			
		||||
 | 
			
		||||
stages:
 | 
			
		||||
- name: "[test_get_all] get all schedules"
 | 
			
		||||
- name: "[get_all] get all schedules"
 | 
			
		||||
  request:
 | 
			
		||||
    url: "http://localhost:5000/api/v1/schedules/"
 | 
			
		||||
    method: GET
 | 
			
		||||
  response:
 | 
			
		||||
    status_code: 200
 | 
			
		||||
 | 
			
		||||
- name: "[test_get_all] get all relays"
 | 
			
		||||
- name: "[get_all] get all relays"
 | 
			
		||||
  request:
 | 
			
		||||
    url: "http://localhost:5000/api/v1/relays/"
 | 
			
		||||
    method: GET
 | 
			
		||||
  response:
 | 
			
		||||
    status_code: 200
 | 
			
		||||
 | 
			
		||||
- name: "[test_get_all] get all controllers"
 | 
			
		||||
- name: "[get_all] get all controllers"
 | 
			
		||||
  request:
 | 
			
		||||
    url: "http://localhost:5000/api/v1/controllers/"
 | 
			
		||||
    method: GET
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -22,26 +22,34 @@ stages:
 | 
			
		|||
        end: "01:00"
 | 
			
		||||
  response:
 | 
			
		||||
    status_code: 201
 | 
			
		||||
    body:
 | 
			
		||||
    json:
 | 
			
		||||
      name: "{tavern.request_vars.json.name}"
 | 
			
		||||
      id: !anystr
 | 
			
		||||
      periods: !anylist
 | 
			
		||||
      tags: !anylist
 | 
			
		||||
    save:
 | 
			
		||||
      body:
 | 
			
		||||
        returned_name: name
 | 
			
		||||
        returned_id: id
 | 
			
		||||
      json:
 | 
			
		||||
        returned_name: "name"
 | 
			
		||||
        returned_id: "id"
 | 
			
		||||
- name: "[test_schedules_basic] get schedule, check name and some periods"
 | 
			
		||||
  request:
 | 
			
		||||
    method: GET
 | 
			
		||||
    url: "http://localhost:5000/api/v1/schedules/{returned_id}"
 | 
			
		||||
  response:
 | 
			
		||||
    status_code: 200
 | 
			
		||||
    body:
 | 
			
		||||
    json:
 | 
			
		||||
      name: "{returned_name}"
 | 
			
		||||
      id: !anystr
 | 
			
		||||
      periods: !anylist
 | 
			
		||||
      tags: !anylist
 | 
			
		||||
 | 
			
		||||
- name: "[test_schedules_basic] delete schedule"
 | 
			
		||||
  request:
 | 
			
		||||
    method: DELETE
 | 
			
		||||
    url: "http://localhost:5000/api/v1/schedules/{returned_id}"
 | 
			
		||||
  response:
 | 
			
		||||
    status_code: 200
 | 
			
		||||
 | 
			
		||||
- name: "[test_schedules_basic] get deleted schedule, expect 404"
 | 
			
		||||
  request:
 | 
			
		||||
    method: GET
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -7,15 +7,19 @@ stages:
 | 
			
		|||
    url: "http://localhost:5000/api/v1/schedules/off"
 | 
			
		||||
  response:
 | 
			
		||||
    status_code: 403
 | 
			
		||||
 | 
			
		||||
- name: "[test_schedules_protected] get protected off schedule"
 | 
			
		||||
  request:
 | 
			
		||||
    method: GET
 | 
			
		||||
    url: "http://localhost:5000/api/v1/schedules/off"
 | 
			
		||||
  response:
 | 
			
		||||
    status_code: 200
 | 
			
		||||
    body:
 | 
			
		||||
    json:
 | 
			
		||||
      id: "off"
 | 
			
		||||
      name: "off"
 | 
			
		||||
      periods: []
 | 
			
		||||
      tags: !anylist
 | 
			
		||||
 | 
			
		||||
- name: "[test_schedules_protected] overwrite protected off schedule"
 | 
			
		||||
  request:
 | 
			
		||||
    method: PUT
 | 
			
		||||
| 
						 | 
				
			
			@ -27,26 +31,33 @@ stages:
 | 
			
		|||
          end: "00:20"
 | 
			
		||||
  response:
 | 
			
		||||
    status_code: 200
 | 
			
		||||
    body:
 | 
			
		||||
    json:
 | 
			
		||||
      id: "off"
 | 
			
		||||
      name: "{tavern.request_vars.json.name}"
 | 
			
		||||
      periods: []
 | 
			
		||||
      tags: !anylist
 | 
			
		||||
 | 
			
		||||
- name: "[test_schedules_protected] delete protected on schedule; expect forbidden/fail"
 | 
			
		||||
  request:
 | 
			
		||||
    method: DELETE
 | 
			
		||||
    url: "http://localhost:5000/api/v1/schedules/on"
 | 
			
		||||
  response:
 | 
			
		||||
    status_code: 403
 | 
			
		||||
 | 
			
		||||
- name: get protected on schedule
 | 
			
		||||
  request:
 | 
			
		||||
    method: GET
 | 
			
		||||
    url: "http://localhost:5000/api/v1/schedules/on"
 | 
			
		||||
  response:
 | 
			
		||||
    status_code: 200
 | 
			
		||||
    body:
 | 
			
		||||
    json:
 | 
			
		||||
      id: "on"
 | 
			
		||||
      name: "on"
 | 
			
		||||
      periods:
 | 
			
		||||
      - start: "00:00"
 | 
			
		||||
        end: "23:59"
 | 
			
		||||
      tags: !anylist
 | 
			
		||||
 | 
			
		||||
- name: "[test_schedules_protected] overwrite protected on schedule"
 | 
			
		||||
  request:
 | 
			
		||||
    method: PUT
 | 
			
		||||
| 
						 | 
				
			
			@ -58,8 +69,10 @@ stages:
 | 
			
		|||
        end: "17:20"
 | 
			
		||||
  response:
 | 
			
		||||
    status_code: 200
 | 
			
		||||
    body:
 | 
			
		||||
    json:
 | 
			
		||||
      id: "on"
 | 
			
		||||
      name: "{tavern.request_vars.json.name}"
 | 
			
		||||
      periods:
 | 
			
		||||
      - start: "00:00"
 | 
			
		||||
        end: "23:59"
 | 
			
		||||
      tags: !anylist
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,7 +1,7 @@
 | 
			
		|||
test_name: Test tagging of schedules and relays
 | 
			
		||||
test_name: "[tags] Test tagging of schedules and relays"
 | 
			
		||||
 | 
			
		||||
stages:
 | 
			
		||||
- name: "[test_tags] post schedule, expect it to be echoed back by tag"
 | 
			
		||||
- name: "[tags] post schedule, expect it to be echoed back by tag"
 | 
			
		||||
  request:
 | 
			
		||||
    method: POST
 | 
			
		||||
    url: "http://localhost:5000/api/v1/schedules/"
 | 
			
		||||
| 
						 | 
				
			
			@ -14,7 +14,7 @@ stages:
 | 
			
		|||
      - "test_tag_1"
 | 
			
		||||
  response:
 | 
			
		||||
    status_code: 201
 | 
			
		||||
    body:
 | 
			
		||||
    json:
 | 
			
		||||
      id: !anystr
 | 
			
		||||
      name: "{tavern.request_vars.json.name}"
 | 
			
		||||
      periods:
 | 
			
		||||
| 
						 | 
				
			
			@ -23,18 +23,21 @@ stages:
 | 
			
		|||
      tags:
 | 
			
		||||
        - "{tavern.request_vars.json.tags[0]}"
 | 
			
		||||
    save:
 | 
			
		||||
      body:
 | 
			
		||||
      json:
 | 
			
		||||
        returned_name: name
 | 
			
		||||
        returned_id: id
 | 
			
		||||
- name: "[test_tags] get schedule, check name and some periods"
 | 
			
		||||
 | 
			
		||||
- name: "[tags] get schedule, check name and some periods"
 | 
			
		||||
  request:
 | 
			
		||||
    method: GET
 | 
			
		||||
    url: "http://localhost:5000/api/v1/schedules/tag/test_tag_1"
 | 
			
		||||
  response:
 | 
			
		||||
    status_code: 200
 | 
			
		||||
    body:
 | 
			
		||||
    json:
 | 
			
		||||
    - name: "{returned_name}"
 | 
			
		||||
      id: "{returned_id}"
 | 
			
		||||
      periods:
 | 
			
		||||
      - start: "00:50"
 | 
			
		||||
        end: "01:00"
 | 
			
		||||
      tags:
 | 
			
		||||
      - "test_tag_1"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue