blob: 452bd4e5a877fe697e83dd9209434a9ae1eef4eb [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
#include "os/mynewt.h"
#include "bsp/bsp.h"
#include <hal/hal_gpio.h>
#include <hal/hal_flash.h>
#include <console/console.h>
#if MYNEWT_VAL(SHELL_TASK)
#include <shell/shell.h>
#endif
#include <log/log.h>
#include <modlog/modlog.h>
#include <stats/stats.h>
#include <config/config.h>
#include "flash_map/flash_map.h"
#include <hal/hal_system.h>
#if MYNEWT_VAL(SPLIT_LOADER)
#include "split/split.h"
#endif
#include <bootutil/image.h>
#include <bootutil/bootutil.h>
#include <imgmgr/imgmgr.h>
#include <assert.h>
#include <string.h>
#include <json/json.h>
#include <reboot/log_reboot.h>
#include <id/id.h>
#include <oic/oc_api.h>
#include <oic/oc_gatt.h>
#include "json_test/json_test.h"
#include "os_test/os_test.h"
#include "testutil/testutil.h"
#if MYNEWT_VAL(CONFIG_NFFS)
#include <fs/fs.h>
#include <nffs/nffs.h>
#include "nffs/nffs_test.h"
#endif /* NFFS */
#if MYNEWT_VAL(CONFIG_FCB)
#include <fcb/fcb.h>
/*#include "../fcb/fcb_test.h"*/
#endif /* FCB */
#include "bootutil/bootutil_test.h"
#include <stddef.h>
#include <config/config_file.h>
#include "mbedtls/mbedtls_test.h"
#if MYNEWT_VAL(RUNTEST_CLI)
#include "runtest/runtest.h"
#endif
#include "tbb.h"
struct os_timeval tv;
struct os_timezone tz;
/* Test Task */
#define TESTTASK_PRIO (1)
#define TESTTASK_STACK_SIZE OS_STACK_ALIGN(256)
static struct os_task testtask;
/* For LED toggling */
int g_led_pin;
int blinky_blink;
#define BLINKY_DUTYCYCLE_SUCCESS 1
#define BLINKY_DUTYCYCLE_FAIL 16
OS_TASK_STACK_DEFINE(teststack, TESTTASK_STACK_SIZE);
void
testbench_test_init(void)
{
blinky_blink = BLINKY_DUTYCYCLE_SUCCESS;
}
/*
* Run the tests
* If any tests fail, blink the LED BLINKY_DUTYCYCLE_FAIL (16) times a second
*/
static void
testtask_handler(void *arg)
{
os_gettimeofday(&tv, &tz);
g_led_pin = LED_BLINK_PIN;
hal_gpio_init_out(g_led_pin, 1);
while (1) {
/*
* if any test fails, blinky the LED more rapidly to
* provide visual feedback from physical device.
*/
if (runtest_total_fails_get() > 0) {
blinky_blink = BLINKY_DUTYCYCLE_FAIL;
}
/* Wait one second */
os_time_delay(OS_TICKS_PER_SEC / blinky_blink);
/* Toggle the LED */
hal_gpio_toggle(g_led_pin);
}
}
static void
omgr_app_init(void)
{ }
static const oc_handler_t omgr_oc_handler = {
.init = omgr_app_init,
};
/*
* main()
* Keep this app simple, just run the tests and then report success or failure.
* Complexity is pushed down to the individual test suites and component test cases.
*/
int
main(int argc, char **argv)
{
int rc;
sysinit();
/* Initialize the OIC */
oc_main_init((oc_handler_t *)&omgr_oc_handler);
#if MYNEWT_VAL(TESTBENCH_BLE)
tbb_init();
oc_ble_coap_gatt_srv_init();
#endif
reboot_start(hal_reset_cause());
/*
* Register the tests that can be run by lookup
* - each test is added to the ts_suites slist
*/
TEST_SUITE_REGISTER(os_mempool_test_suite);
TEST_SUITE_REGISTER(os_mutex_test_suite);
TEST_SUITE_REGISTER(os_sem_test_suite);
TEST_SUITE_REGISTER(test_json_suite);
testbench_test_init(); /* initialize globals include blink duty cycle */
os_task_init(&testtask, "testtask", testtask_handler, NULL,
TESTTASK_PRIO, OS_WAIT_FOREVER, teststack,
TESTTASK_STACK_SIZE);
MODLOG_INFO(LOG_MODULE_TEST, "testbench app initialized");
while (1) {
os_eventq_run(os_eventq_dflt_get());
}
assert(0);
return rc;
}