static void expect_shutdown_or_reboot(module_t* module, dsme_state_t state, int runlevel) { DSM_MSGTYPE_STATE_CHANGE_IND* ind; assert((ind = queued(DSM_MSGTYPE_STATE_CHANGE_IND))); assert(ind->state == state); free(ind); DSM_MSGTYPE_SAVE_DATA_IND* ind2; assert((ind2 = queued(DSM_MSGTYPE_SAVE_DATA_IND))); free(ind2); assert(message_queue_is_empty()); assert(timer_exists()); trigger_timer(); DSM_MSGTYPE_SHUTDOWN* msg3; assert((msg3 = queued(DSM_MSGTYPE_SHUTDOWN))); assert(msg3->runlevel == runlevel); free(msg3); assert(!timer_exists()); assert(message_queue_is_empty()); }
static module_t* load_state_module(const char* bootstate, dsme_state_t expected_state) { module_t* module; gchar* module_name = g_strconcat(dsme_module_path, "state.so", NULL); setenv("BOOTSTATE", bootstate, true); module = load_module_under_test(module_name); unsetenv("BOOTSTATE"); g_free(module_name); DSM_MSGTYPE_STATE_CHANGE_IND* ind; assert((ind = queued(DSM_MSGTYPE_STATE_CHANGE_IND))); assert(ind->state == expected_state); free(ind); if (expected_state == DSME_STATE_ACTDEAD) { DSM_MSGTYPE_SAVE_DATA_IND* ind2; assert(ind2 = queued(DSM_MSGTYPE_SAVE_DATA_IND)); free(ind2); } // TODO: this assert is not valid in case we MALF when loading the module // assert(message_queue_is_empty()); return module; }
static void request_shutdown_expecting_actdead(module_t* state) { DSM_MSGTYPE_SHUTDOWN_REQ msg = TEST_MSG_INIT(DSM_MSGTYPE_SHUTDOWN_REQ); send_message(state, &msg); DSM_MSGTYPE_STATE_CHANGE_IND* ind; assert((ind = queued(DSM_MSGTYPE_STATE_CHANGE_IND))); assert(ind->state == DSME_STATE_ACTDEAD); free(ind); DSM_MSGTYPE_SAVE_DATA_IND* ind2; assert((ind2 = queued(DSM_MSGTYPE_SAVE_DATA_IND))); free(ind2); assert(message_queue_is_empty()); assert(timer_exists()); trigger_timer(); DSM_MSGTYPE_CHANGE_RUNLEVEL* msg2; assert((msg2 = queued(DSM_MSGTYPE_CHANGE_RUNLEVEL))); assert(msg2->runlevel == 5); free(msg2); assert(!timer_exists()); assert(message_queue_is_empty()); }
static unsigned long ExecIO_Write_From_Queue ( PLL pll) /* Pointer to file linked list item */ { /* Local function variables */ char * Item; /* Item pulled from the queue */ long items; /* process request */ if (ExecIO_Options.lRcdCnt == 0) { return 0; } /* start at the proper place in the queue */ while (ExecIO_Options.lStartRcd > 1 && queued() > 0) { Item = pull(); if (Item != NULL) { RexxFreeMemory(Item); } ExecIO_Options.lStartRcd--; } if (ExecIO_Options.lRcdCnt == -1) { /* process an "*" record count */ items = queued(); while (items > 0) { Item = pull(); if (Item != NULL) { fputs(Item, pll -> pFile); fputs("\n", pll -> pFile); RexxFreeMemory(Item); } else { goto return_point; } items--; } } else { /* process a specific record count */ while (ExecIO_Options.lRcdCnt > 0) { if (queued() == 0) break; Item = pull(); if (Item != NULL) { fputs(Item, pll -> pFile); fputs("\n", pll -> pFile); RexxFreeMemory(Item); } else { goto return_point; } ExecIO_Options.lRcdCnt--; } } return_point: fflush (pll -> pFile); /* return with successful return code */ return 0; }
static void testcase23(void) { /* broken timers */ // thermal shutdown when not able to create a timer dsme_create_timer_fails = 1; module_t* state = load_state_module("USER", DSME_STATE_USER); assert(!timer_exists()); DSM_MSGTYPE_SET_THERMAL_STATE msg = TEST_MSG_INIT(DSM_MSGTYPE_SET_THERMAL_STATE); msg.overheated = true; send_message(state, &msg); DSM_MSGTYPE_STATE_CHANGE_IND* ind2; assert((ind2 = queued(DSM_MSGTYPE_STATE_CHANGE_IND))); assert(ind2->state == DSME_STATE_SHUTDOWN); free(ind2); DSM_MSGTYPE_SAVE_DATA_IND* ind3; assert((ind3 = queued(DSM_MSGTYPE_SAVE_DATA_IND))); free(ind3); assert(message_queue_is_empty()); assert(timer_exists()); trigger_timer(); DSM_MSGTYPE_HWWD_KICK* ind4; assert((ind4 = queued(DSM_MSGTYPE_HWWD_KICK))); free(ind4); DSM_MSGTYPE_SHUTDOWN* msg2; assert((msg2 = queued(DSM_MSGTYPE_SHUTDOWN))); assert(msg2->runlevel == 0); free(msg2); assert(!timer_exists()); assert(message_queue_is_empty()); unload_module_under_test(state); // start in actdead and plug and unplug the charger, but timer fails dsme_create_timer_fails = 1; state = load_state_module("ACT_DEAD", DSME_STATE_ACTDEAD); assert(!timer_exists()); connect_charger(state); assert(message_queue_is_empty()); assert(!timer_exists()); disconnect_charger(state); expect_shutdown(state); assert(!timer_exists()); assert(message_queue_is_empty()); unload_module_under_test(state); }
/* Set alarm with com.nokia.time dbus interface */ static void test_init_set_alarm_in5min(void) { load_alarmtracker(0); DBusMessage* alarm_setup_msg = dbus_message_new_signal("/com/nokia/time", "com.nokia.time", "next_bootup_event"); time_t new_alarm_time = time(0)+300; dbus_message_append_args(alarm_setup_msg, DBUS_TYPE_INT32, &new_alarm_time); dsme_dbus_stub_send_signal(alarm_setup_msg); free(alarm_setup_msg); assert(!message_queue_is_empty()); assert(queued(DSM_MSGTYPE_WAIT)); assert(message_queue_is_empty()); DSM_MSGTYPE_WAKEUP wakeupmsg = TEST_MSG_INIT(DSM_MSGTYPE_WAKEUP); send_message(alarmtracker_module, &wakeupmsg); /* INTERNAL MSGs */ DSM_MSGTYPE_SET_ALARM_STATE *msg; assert(message_queue_is_empty()); /* DBUS IF */ assert(dbusmsgq_async->len == 0); assert(dbusmsgq_blocking->len == 0); /* DSMESOCK */ assert((msg = queued_dsmesock(DSM_MSGTYPE_SET_ALARM_STATE))); assert(msg->alarm_set); free(msg); assert(g_slist_length(dsmesock_broadcasts)==0); assert(timer_exists()); sumtime(first_timer_seconds()); trigger_timer(); assert(!message_queue_is_empty()); assert((msg = queued(DSM_MSGTYPE_SET_ALARM_STATE))); assert(msg->alarm_set); free(msg); assert(dbusmsgq_async->len == 0); assert(dbusmsgq_blocking->len == 0); assert(g_slist_length(dsmesock_broadcasts)==0); assert(!timer_exists()); unload_alarmtracker(); }
bool getJob(work_t &job) { boost::mutex::scoped_lock lock(io_mutex_); while (false == done_ && queued() == 0) { boost::system_time tAbsoluteTime = boost::get_system_time() + boost::posix_time::seconds(max_wait_for_job_sec_); cond_.timed_wait(io_mutex_, tAbsoluteTime); } if (queued() == 0) return false; job = message_list_.front(); message_list_.pop_front(); number_messages_--; return true; }
static void testcase14(void) { /* * 1. request shutdown when charger is known to be plugged in * 2. start emergency call before timer runs out * 3. stop emergency call */ module_t* state = load_state_module("USER", DSME_STATE_USER); assert(!timer_exists()); // plug in charger connect_charger(state); assert(message_queue_is_empty()); assert(!timer_exists()); // request shutdown DSM_MSGTYPE_SHUTDOWN_REQ msg = TEST_MSG_INIT(DSM_MSGTYPE_SHUTDOWN_REQ); send_message(state, &msg); DSM_MSGTYPE_STATE_CHANGE_IND* ind; assert((ind = queued(DSM_MSGTYPE_STATE_CHANGE_IND))); assert(ind->state == DSME_STATE_ACTDEAD); free(ind); DSM_MSGTYPE_SAVE_DATA_IND* ind2; assert((ind2 = queued(DSM_MSGTYPE_SAVE_DATA_IND))); free(ind2); assert(message_queue_is_empty()); assert(timer_exists()); // start emergency call DSM_MSGTYPE_SET_EMERGENCY_CALL_STATE msg2 = TEST_MSG_INIT(DSM_MSGTYPE_SET_EMERGENCY_CALL_STATE); msg2.ongoing = true; send_message(state, &msg2); assert(message_queue_is_empty()); assert(!timer_exists()); // stop emergency call DSM_MSGTYPE_SET_EMERGENCY_CALL_STATE msg3 = TEST_MSG_INIT(DSM_MSGTYPE_SET_EMERGENCY_CALL_STATE); msg3.ongoing = false; send_message(state, &msg3); // TODO: should we go to actdead instead? assert(message_queue_is_empty()); assert(!timer_exists()); unload_module_under_test(state); }
static void testcase5(void) { /* * 1. request shutdown when charger is known to be unplugged * 2. plug in charger before timer runs out * => expect shutdown */ module_t* state = load_state_module("USER", DSME_STATE_USER); assert(!timer_exists()); // unplug charger disconnect_charger(state); assert(message_queue_is_empty()); assert(!timer_exists()); // request shutdown DSM_MSGTYPE_SHUTDOWN_REQ msg = TEST_MSG_INIT(DSM_MSGTYPE_SHUTDOWN_REQ); send_message(state, &msg); DSM_MSGTYPE_STATE_CHANGE_IND* ind; assert((ind = queued(DSM_MSGTYPE_STATE_CHANGE_IND))); assert(ind->state == DSME_STATE_SHUTDOWN); free(ind); DSM_MSGTYPE_SAVE_DATA_IND* ind2; assert((ind2 = queued(DSM_MSGTYPE_SAVE_DATA_IND))); free(ind2); assert(message_queue_is_empty()); assert(timer_exists()); // plug in charger connect_charger(state); assert(message_queue_is_empty()); // expect shutdown trigger_timer(); DSM_MSGTYPE_HWWD_KICK* ind3; assert((ind3 = queued(DSM_MSGTYPE_HWWD_KICK))); free(ind3); DSM_MSGTYPE_SHUTDOWN* msg2; assert((msg2 = queued(DSM_MSGTYPE_SHUTDOWN))); assert(msg2->runlevel == 0); free(msg2); assert(!timer_exists()); assert(message_queue_is_empty()); unload_module_under_test(state); }
static void testcase20(void) { /* weird $BOOTSTATE cases */ gchar* module_name = g_strconcat(dsme_module_path, "state.so", NULL); // do not specify $BOOTSTATE module_t* state = load_module_under_test(module_name); DSM_MSGTYPE_STATE_CHANGE_IND* ind; assert(ind = queued(DSM_MSGTYPE_STATE_CHANGE_IND)); assert(ind->state == DSME_STATE_USER); free(ind); assert(message_queue_is_empty()); assert(!timer_exists()); unload_module_under_test(state); // specify a bad $BOOTSTATE state = load_state_module("DIIBADAABA", DSME_STATE_USER); DSM_MSGTYPE_ENTER_MALF* msg; assert(msg = queued(DSM_MSGTYPE_ENTER_MALF)); free(msg); assert(!timer_exists()); assert(message_queue_is_empty()); unload_module_under_test(state); // specify SHUTDOWN setenv("BOOTSTATE", "SHUTDOWN", true); state = load_module_under_test(module_name); unsetenv("BOOTSTATE"); expect_shutdown(state); unload_module_under_test(state); // specify SHUTDOWN setenv("BOOTSTATE", "SHUTDOWN", true); state = load_module_under_test(module_name); unsetenv("BOOTSTATE"); expect_shutdown(state); unload_module_under_test(state); // specify BOOT setenv("BOOTSTATE", "BOOT", true); state = load_module_under_test(module_name); unsetenv("BOOTSTATE"); expect_reboot(state); unload_module_under_test(state); g_free(module_name); }
static void assert_usb_mounted_to_pc(bool mounted_to_pc) { DSM_MSGTYPE_SET_USB_STATE* usb_state_msg; assert((usb_state_msg = queued(DSM_MSGTYPE_SET_USB_STATE))); assert(usb_state_msg->mounted_to_pc == mounted_to_pc); free(usb_state_msg); }
/* 300sec > DSME SNOOZE TIMEOUT */ static void test_init_alarm_in5min(void) { load_alarmtracker(time(0)+300); /* INTERNAL MSGs */ DSM_MSGTYPE_SET_ALARM_STATE *msg; assert(message_queue_is_empty()); /* DBUS IF */ assert(dbusmsgq_async->len == 0); assert(dbusmsgq_blocking->len == 0); /* DSMESOCK */ assert((msg = queued_dsmesock(DSM_MSGTYPE_SET_ALARM_STATE))); assert(msg->alarm_set); free(msg); assert(g_slist_length(dsmesock_broadcasts)==0); assert(timer_exists()); sumtime(first_timer_seconds()); trigger_timer(); assert(!message_queue_is_empty()); assert((msg = queued(DSM_MSGTYPE_SET_ALARM_STATE))); assert(msg->alarm_set); free(msg); assert(dbusmsgq_async->len == 0); assert(dbusmsgq_blocking->len == 0); assert(g_slist_length(dsmesock_broadcasts)==0); assert(!timer_exists()); unload_alarmtracker(); }
static void assert_emergency_call_status(bool ongoing) { DSM_MSGTYPE_SET_EMERGENCY_CALL_STATE* emergency_call_msg; assert((emergency_call_msg = queued(DSM_MSGTYPE_SET_EMERGENCY_CALL_STATE))); assert(emergency_call_msg->ongoing == ongoing); free(emergency_call_msg); }
static void testcase18(void) { /* * 1. start in actdead * 2. request startup */ module_t* state = load_state_module("ACT_DEAD", DSME_STATE_ACTDEAD); assert(!timer_exists()); assert(message_queue_is_empty()); // query state DSM_MSGTYPE_STATE_QUERY msg = TEST_MSG_INIT(DSM_MSGTYPE_STATE_QUERY); send_message(state, &msg); DSM_MSGTYPE_STATE_CHANGE_IND* ind; assert((ind = queued(DSM_MSGTYPE_STATE_CHANGE_IND))); assert(ind->state == DSME_STATE_ACTDEAD); free(ind); assert(message_queue_is_empty()); assert(!timer_exists()); // request startup DSM_MSGTYPE_POWERUP_REQ msg2 = TEST_MSG_INIT(DSM_MSGTYPE_POWERUP_REQ); send_message(state, &msg2); assert((ind = queued(DSM_MSGTYPE_STATE_CHANGE_IND))); assert(ind->state == DSME_STATE_USER); free(ind); assert(timer_exists()); trigger_timer(); DSM_MSGTYPE_CHANGE_RUNLEVEL* req; assert((req = queued(DSM_MSGTYPE_CHANGE_RUNLEVEL))); assert(req->runlevel == 2); assert(message_queue_is_empty()); assert(!timer_exists()); // query state send_message(state, &msg); assert((ind = queued(DSM_MSGTYPE_STATE_CHANGE_IND))); assert(ind->state == DSME_STATE_USER); free(ind); assert(message_queue_is_empty()); assert(!timer_exists()); unload_module_under_test(state); }
void HttpServer::getSatelliteStats(vector<std::pair<std::string, int>> *stats) { for (auto i : m_satellites) { std::pair<std::string, int> active("satellite." + i->getName() + ".load", i->getActiveWorker()); std::pair<std::string, int> queued("satellite." + i->getName() + ".queued", i->getQueuedJobs()); stats->push_back(active); stats->push_back(queued); } }
static void testcase21(void) { /* non-rd_mode cases and cal problems */ gchar* module_name = g_strconcat(dsme_module_path, "state.so", NULL); // non-rd_mode rd_mode = ""; unsetenv("DSME_RD_FLAGS_ENV"); setenv("BOOTSTATE", "DIIBADAABA", true); module_t* state = load_module_under_test(module_name); unsetenv("BOOTSTATE"); DSM_MSGTYPE_STATE_CHANGE_IND* ind; assert(ind = queued(DSM_MSGTYPE_STATE_CHANGE_IND)); assert(ind->state == DSME_STATE_USER); free(ind); assert(!message_queue_is_empty()); DSM_MSGTYPE_ENTER_MALF* malfmsg; assert((malfmsg = queued(DSM_MSGTYPE_ENTER_MALF))); //TODO: Should the reason / component be checked? free(malfmsg); assert(message_queue_is_empty()); assert(!timer_exists()); unload_module_under_test(state); // cal problem rd_mode = 0; setenv("BOOTSTATE", "DIIBADAABA", true); state = load_module_under_test(module_name); unsetenv("BOOTSTATE"); assert(ind = queued(DSM_MSGTYPE_STATE_CHANGE_IND)); assert(ind->state == DSME_STATE_USER); free(ind); assert(!message_queue_is_empty()); assert(malfmsg = queued(DSM_MSGTYPE_ENTER_MALF)); //TODO: Should the reason / component be checked? free(malfmsg); assert(message_queue_is_empty()); assert(!timer_exists()); unload_module_under_test(state); g_free(module_name); }
static void testcase12(void) { /* shutdown on empty battery */ module_t* state = load_state_module("USER", DSME_STATE_USER); assert(!timer_exists()); // unplug charger disconnect_charger(state); // indicate an empty battery DSM_MSGTYPE_SET_BATTERY_STATE msg = TEST_MSG_INIT(DSM_MSGTYPE_SET_BATTERY_STATE); msg.empty = true; send_message(state, &msg); assert(timer_exists()); trigger_timer(); DSM_MSGTYPE_BATTERY_EMPTY_IND* ind; assert((ind = queued(DSM_MSGTYPE_BATTERY_EMPTY_IND))); free(ind); DSM_MSGTYPE_STATE_CHANGE_IND* ind2; assert((ind2 = queued(DSM_MSGTYPE_STATE_CHANGE_IND))); assert(ind2->state == DSME_STATE_SHUTDOWN); free(ind2); DSM_MSGTYPE_SAVE_DATA_IND* ind3; assert((ind3 = queued(DSM_MSGTYPE_SAVE_DATA_IND))); free(ind3); // expect shutdown trigger_timer(); DSM_MSGTYPE_SHUTDOWN* msg2; assert((msg2 = queued(DSM_MSGTYPE_SHUTDOWN))); assert(msg2->runlevel == 0); free(msg2); assert(!timer_exists()); assert(message_queue_is_empty()); unload_module_under_test(state); }
static module_t* load_state_module(const char* bootstate, dsme_state_t expected_state) { module_t* module; setenv("BOOTSTATE", bootstate, true); module = load_module_under_test("../modules/libstate.so"); unsetenv("BOOTSTATE"); DSM_MSGTYPE_STATE_CHANGE_IND* ind; assert((ind = queued(DSM_MSGTYPE_STATE_CHANGE_IND))); assert(ind->state == expected_state); free(ind); if (expected_state == DSME_STATE_ACTDEAD) { DSM_MSGTYPE_SAVE_DATA_IND* ind2; assert(ind2 = queued(DSM_MSGTYPE_SAVE_DATA_IND)); free(ind2); } assert(message_queue_is_empty()); return module; }
static void testcase20(void) { /* weird $BOOTSTATE cases */ // do not specify $BOOTSTATE module_t* state = load_module_under_test("../modules/libstate.so"); DSM_MSGTYPE_STATE_CHANGE_IND* ind; assert((ind = queued(DSM_MSGTYPE_STATE_CHANGE_IND))); assert(ind->state == DSME_STATE_MALF); free(ind); assert(message_queue_is_empty()); assert(!timer_exists()); unload_module_under_test(state); // specify a bad $BOOTSTATE state = load_state_module("DIIBADAABA", DSME_STATE_MALF); assert(!timer_exists()); assert(message_queue_is_empty()); unload_module_under_test(state); // specify SHUTDOWN setenv("BOOTSTATE", "SHUTDOWN", true); state = load_module_under_test("../modules/libstate.so"); unsetenv("BOOTSTATE"); expect_shutdown(state); unload_module_under_test(state); // specify SHUTDOWN setenv("BOOTSTATE", "SHUTDOWN", true); state = load_module_under_test("../modules/libstate.so"); unsetenv("BOOTSTATE"); expect_shutdown(state); unload_module_under_test(state); // specify BOOT setenv("BOOTSTATE", "BOOT", true); state = load_module_under_test("../modules/libstate.so"); unsetenv("BOOTSTATE"); expect_reboot(state); unload_module_under_test(state); }
static void testcase21(void) { /* non-rd_mode cases and cal problems */ // non-rd_mode rd_mode = ""; setenv("BOOTSTATE", "DIIBADAABA", true); module_t* state = load_module_under_test("../modules/libstate.so"); unsetenv("BOOTSTATE"); DSM_MSGTYPE_STATE_CHANGE_IND* ind; assert((ind = queued(DSM_MSGTYPE_STATE_CHANGE_IND))); assert(ind->state == DSME_STATE_MALF); free(ind); assert(message_queue_is_empty()); assert(timer_exists()); trigger_timer(); DSM_MSGTYPE_HWWD_KICK* ind3; assert((ind3 = queued(DSM_MSGTYPE_HWWD_KICK))); free(ind3); DSM_MSGTYPE_SHUTDOWN* msg; assert((msg = queued(DSM_MSGTYPE_SHUTDOWN))); assert(msg->runlevel == 8); free(msg); assert(message_queue_is_empty()); assert(!timer_exists()); unload_module_under_test(state); // cal problem rd_mode = 0; setenv("BOOTSTATE", "DIIBADAABA", true); state = load_module_under_test("../modules/libstate.so"); unsetenv("BOOTSTATE"); assert((ind = queued(DSM_MSGTYPE_STATE_CHANGE_IND))); assert(ind->state == DSME_STATE_MALF); free(ind); assert(message_queue_is_empty()); assert(timer_exists()); trigger_timer(); assert((ind3 = queued(DSM_MSGTYPE_HWWD_KICK))); free(ind3); assert((msg = queued(DSM_MSGTYPE_SHUTDOWN))); assert(msg->runlevel == 8); free(msg); assert(message_queue_is_empty()); assert(!timer_exists()); unload_module_under_test(state); }
Queue_item::Status Queue_item::status() const { assert (!queued()); return Status((unsigned long)_q); }