Example #1
0
void test_mdl_createAndExecute()
{
    int                  status;
    pqueue*              pq = (pqueue*)1;
    char* const          tcpAddr = "127.0.0.1";
    const unsigned short tcpPort = 38800;
    char* const          addr = "224.0.0.1";
    const unsigned short port = 1;
    int                  (*int_func)() = (int(*)())1;
    void                 (*void_func)() = (void(*)())2;
    McastInfo       mcastInfo;
    Mdl*                 mdl;

    mcastInfo.group.addr = addr;
    mcastInfo.group.port = port;
    mcastInfo.server.addr = tcpAddr;
    mcastInfo.server.port = tcpPort;

    /* Invalid product-queue argument */
    mdl = mdl_new(NULL, &mcastInfo, void_func, NULL);
    log_log(LOG_INFO);
    OP_ASSERT_TRUE(mdl == NULL);
    log_clear();

    /* Invalid multicast information argument */
    mdl = mdl_new(pq, NULL, void_func, NULL);
    log_log(LOG_INFO);
    OP_ASSERT_TRUE(mdl == NULL);
    log_clear();

    /* Invalid missed-product-function argument */
    mdl = mdl_new(pq, &mcastInfo, NULL, NULL);
    log_log(LOG_INFO);
    OP_ASSERT_TRUE(mdl == NULL);
    log_clear();

    /* Trivial execution */
    vcmtpReceiver_new_ExpectAndReturn(
            NULL, tcpAddr,  tcpPort,   int_func, int_func, void_func, addr,     port,      NULL,   0,
            NULL, cmp_cstr, cmp_short, NULL,     NULL,     NULL,      cmp_cstr, cmp_short, NULL);
    mdl = mdl_new(pq, &mcastInfo, void_func, NULL);
    log_log(LOG_INFO);
    OP_ASSERT_FALSE(mdl == NULL);

    vcmtpReceiver_execute_ExpectAndReturn(NULL, 0, NULL);
    status = mdl_start(mdl);
    log_log(LOG_INFO);
    OP_ASSERT_EQUAL_INT(LDM7_SHUTDOWN, status);

    vcmtpReceiver_free_ExpectAndReturn(NULL, NULL);
    mdl_free(mdl);
    log_log(LOG_INFO);

    OP_VERIFY();
}
static void test_msm_open()
{
    McastSessionMemory* msm;

    openMsm(&msm);
    OP_ASSERT_TRUE(msm != NULL);

    OP_ASSERT_TRUE(msm_close(msm));
    log_log(LOG_ERR);

    OP_VERIFY();
}
static void
init()
{
    ServiceAddr* groupAddr = sa_new(GROUP_ADDR, GROUP_PORT);
    OP_ASSERT_TRUE(groupAddr != NULL);
    ServiceAddr* serverAddr = sa_new(SERVER_ADDR, SERVER_PORT);
    OP_ASSERT_TRUE(serverAddr != NULL);
    mcastInfo = mi_new(feedtype, groupAddr, serverAddr);
    OP_ASSERT_TRUE(mcastInfo != NULL);
    sa_free(groupAddr);
    sa_free(serverAddr);
    prodQ = (void*)2;
}
static void init()
{
    static bool initialized;

    if (!initialized) {
        char buf[265];

        SERVICE_ADDR = sa_new(HOSTNAME, PORT);
        OP_ASSERT_TRUE(SERVICE_ADDR != NULL);
        CWD = getcwd(buf, sizeof(buf));
        OP_ASSERT_TRUE(CWD != NULL);
        initialized = true;
    }
}
static void openMsm(
    McastSessionMemory** msm)
{
    getLdmLogDir_ExpectAndReturn(CWD);
    *msm = msm_open(SERVICE_ADDR , MCAST_GROUP_ID);
    log_log(LOG_ERR);
    OP_ASSERT_TRUE(*msm != NULL);
}
static void test_running()
{
    msm_lock_ExpectAndReturn(true, 0, cmp_bool);
    mcastPid = getpid(); // emulate running process
    msm_getPid_MockWithCallback(msm_getPid_callback);
    msm_unlock_ExpectAndReturn(0);
    OP_ASSERT_TRUE(mlsm_ensureRunning(feedtype) == 0);
    log_log(LOG_ERR);
    OP_VERIFY();
}
static void test_not_running()
{
    msm_lock_ExpectAndReturn(true, 0, cmp_bool);
    mcastPid = 1; // kill(1, 0) will return -1 -- emulating no-such-process
    msm_getPid_MockWithCallback(msm_getPid_callback);
    fork_ExpectAndReturn(1);
    msm_put_ExpectAndReturn(feedtype, mcastPid, 0, cmp_int, cmp_int);
    msm_unlock_ExpectAndReturn(0);
    OP_ASSERT_TRUE(mlsm_ensureRunning(feedtype) == 0);
    log_log(LOG_ERR);
    OP_VERIFY();
}
static void test_last_mcast_prod()
{
    McastSessionMemory* msm;
    int                 status;

    getLdmLogDir_ExpectAndReturn(CWD);
    OP_ASSERT_TRUE(msm_delete(SERVICE_ADDR, MCAST_GROUP_ID));

    openMsm(&msm);

    signaturet sig1;
    status = msm_getLastMcastProd(msm, sig1);
    log_log(LOG_ERR);
    OP_ASSERT_FALSE(status);

    signaturet sig2;
    (void)memset(&sig2, 1, sizeof(sig2));
    status = msm_setLastMcastProd(msm, sig2);
    log_log(LOG_ERR);
    OP_ASSERT_TRUE(status);
    status = msm_getLastMcastProd(msm, sig1);
    log_log(LOG_ERR);
    OP_ASSERT_TRUE(status);
    OP_ASSERT_TRUE(memcmp(&sig1, &sig2, sizeof(sig1)) == 0);

    status = msm_close(msm);
    log_log(LOG_ERR);
    OP_ASSERT_TRUE(status);

    // Verify the data in the new file

    openMsm(&msm);

    status = msm_getLastMcastProd(msm, sig1);
    log_log(LOG_ERR);
    OP_ASSERT_TRUE(status);
    OP_ASSERT_TRUE(memcmp(&sig1, &sig2, sizeof(signaturet)) == 0);

    status = msm_close(msm);
    log_log(LOG_ERR);
    OP_ASSERT_TRUE(status);

    OP_VERIFY();
}
static void test_missed_mcast_files()
{
    McastSessionMemory* msm;
    int                 status;
    McastProdIndex      iProd;

    openMsm(&msm);
    msm_clearAllMissedFiles(msm);

    status = msm_getAnyMissedFileNoWait(msm, &iProd);
    log_log(LOG_ERR);
    OP_ASSERT_FALSE(status);

    status = msm_addMissedFile(msm, 1);
    OP_ASSERT_TRUE(status);
    status = msm_addMissedFile(msm, 2);
    OP_ASSERT_TRUE(status);
    status = msm_addMissedFile(msm, 3);
    OP_ASSERT_TRUE(status);

    status = msm_peekMissedFileNoWait(msm, &iProd);
    OP_ASSERT_TRUE(status);
    OP_ASSERT_TRUE(iProd == 1);

    status = msm_addRequestedFile(msm, iProd);
    OP_ASSERT_TRUE(status);

    status = msm_removeMissedFileNoWait(msm, &iProd);
    OP_ASSERT_TRUE(status);
    OP_ASSERT_TRUE(iProd == 1);

    status = msm_removeMissedFileNoWait(msm, &iProd);
    OP_ASSERT_TRUE(status);
    OP_ASSERT_TRUE(iProd == 2);

    status = msm_addRequestedFile(msm, iProd);
    OP_ASSERT_TRUE(status);

    status = msm_removeRequestedFileNoWait(msm, &iProd);
    OP_ASSERT_TRUE(status);
    OP_ASSERT_TRUE(iProd == 1);

    msm_close(msm);
    log_log(LOG_ERR);
    OP_ASSERT_TRUE(status);

    openMsm(&msm);

    status = msm_getAnyMissedFileNoWait(msm, &iProd);
    log_log(LOG_ERR);
    OP_ASSERT_TRUE(status);
    OP_ASSERT_TRUE(iProd = 2);

    status = msm_getAnyMissedFileNoWait(msm, &iProd);
    log_log(LOG_ERR);
    OP_ASSERT_TRUE(status);
    OP_ASSERT_TRUE(iProd = 3);

    status = msm_getAnyMissedFileNoWait(msm, &iProd);
    log_log(LOG_ERR);
    OP_ASSERT_FALSE(status);

    msm_close(msm);

    OP_VERIFY();
}
static void test_conflict()
{
    OP_ASSERT_TRUE(mlsm_addPotentialSender(mcastInfo) == 0);
    OP_ASSERT_TRUE(mlsm_addPotentialSender(mcastInfo) == LDM7_DUP);
    OP_VERIFY();
}
static void test_noPotentialSender()
{
    OP_ASSERT_TRUE(mlsm_ensureRunning(feedtype) == LDM7_NOENT);
    log_clear();
    OP_VERIFY();
}