Exemplo n.º 1
0
void test_class_db_value(void) {
    char* text = NULL;
    const char* enum_text = NULL;
    int ret;
    db_type_int32_t int32;
    db_type_uint32_t uint32;
    db_type_int64_t int64;
    db_type_uint64_t uint64;
    CU_ASSERT_PTR_NOT_NULL_FATAL((value2 = db_value_new()));

    CU_ASSERT_PTR_NOT_NULL_FATAL((value = db_value_new()));
    CU_ASSERT(!db_value_from_text(value, "test"));
    CU_ASSERT(db_value_type(value) == DB_TYPE_TEXT);
    CU_ASSERT_PTR_NOT_NULL_FATAL(db_value_text(value));
    CU_ASSERT(!strcmp(db_value_text(value), "test"));
    CU_ASSERT(!db_value_to_text(value, &text));
    CU_ASSERT_PTR_NOT_NULL(text);
    free(text);
    text = NULL;
    CU_ASSERT(!db_value_not_empty(value));
    CU_ASSERT(!db_value_copy(value2, value));
    CU_ASSERT(db_value_type(value2) == DB_TYPE_TEXT);
    CU_ASSERT_PTR_NOT_NULL_FATAL(db_value_text(value2));
    CU_ASSERT(!strcmp(db_value_text(value2), "test"));
    CU_ASSERT(!db_value_cmp(value, value2, &ret));
    CU_ASSERT(!ret);
    CU_ASSERT(!db_value_set_primary_key(value));
    CU_ASSERT(db_value_primary_key(value));

    db_value_reset(value);
    CU_PASS("db_value_reset");

    CU_ASSERT(!db_value_from_int32(value, -12345));
    CU_ASSERT(db_value_type(value) == DB_TYPE_INT32);
    CU_ASSERT(!db_value_to_int32(value, &int32));
    CU_ASSERT(int32 == -12345);
    CU_ASSERT(!db_value_not_empty(value));
    db_value_reset(value2);
    CU_PASS("db_value_reset");
    CU_ASSERT(!db_value_copy(value2, value));
    CU_ASSERT(db_value_type(value2) == DB_TYPE_INT32);
    CU_ASSERT(!db_value_to_int32(value2, &int32));
    CU_ASSERT(int32 == -12345);
    CU_ASSERT(!db_value_cmp(value, value2, &ret));
    CU_ASSERT(!ret);
    CU_ASSERT(!db_value_set_primary_key(value));
    CU_ASSERT(db_value_primary_key(value));

    db_value_reset(value);
    CU_PASS("db_value_reset");

    CU_ASSERT(!db_value_from_uint32(value, 12345));
    CU_ASSERT(db_value_type(value) == DB_TYPE_UINT32);
    CU_ASSERT(!db_value_to_uint32(value, &uint32));
    CU_ASSERT(uint32 == 12345);
    CU_ASSERT(!db_value_not_empty(value));
    db_value_reset(value2);
    CU_PASS("db_value_reset");
    CU_ASSERT(!db_value_copy(value2, value));
    CU_ASSERT(db_value_type(value2) == DB_TYPE_UINT32);
    CU_ASSERT(!db_value_to_uint32(value2, &uint32));
    CU_ASSERT(uint32 == 12345);
    CU_ASSERT(!db_value_cmp(value, value2, &ret));
    CU_ASSERT(!ret);
    CU_ASSERT(!db_value_set_primary_key(value));
    CU_ASSERT(db_value_primary_key(value));

    db_value_reset(value);
    CU_PASS("db_value_reset");

    CU_ASSERT(!db_value_from_int64(value, -9223372036854775800));
    CU_ASSERT(db_value_type(value) == DB_TYPE_INT64);
    CU_ASSERT(!db_value_to_int64(value, &int64));
    CU_ASSERT(int64 == -9223372036854775800);
    CU_ASSERT(!db_value_not_empty(value));
    db_value_reset(value2);
    CU_PASS("db_value_reset");
    CU_ASSERT(!db_value_copy(value2, value));
    CU_ASSERT(db_value_type(value2) == DB_TYPE_INT64);
    CU_ASSERT(!db_value_to_int64(value2, &int64));
    CU_ASSERT(int64 == -9223372036854775800);
    CU_ASSERT(!db_value_cmp(value, value2, &ret));
    CU_ASSERT(!ret);
    CU_ASSERT(!db_value_set_primary_key(value));
    CU_ASSERT(db_value_primary_key(value));

    db_value_reset(value);
    CU_PASS("db_value_reset");


    CU_ASSERT(!db_value_from_uint64(value, 17446744073709551615UL));
    CU_ASSERT(db_value_type(value) == DB_TYPE_UINT64);
    CU_ASSERT(!db_value_to_uint64(value, &uint64));
    CU_ASSERT(uint64 == 17446744073709551615UL);
    CU_ASSERT(!db_value_not_empty(value));
    db_value_reset(value2);
    CU_PASS("db_value_reset");
    CU_ASSERT(!db_value_copy(value2, value));
    CU_ASSERT(db_value_type(value2) == DB_TYPE_UINT64);
    CU_ASSERT(!db_value_to_uint64(value2, &uint64));
    CU_ASSERT(uint64 == 17446744073709551615UL);
    CU_ASSERT(!db_value_cmp(value, value2, &ret));
    CU_ASSERT(!ret);
    CU_ASSERT(!db_value_set_primary_key(value));
    CU_ASSERT(db_value_primary_key(value));

    db_value_reset(value);
    CU_PASS("db_value_reset");

    CU_ASSERT(!db_value_from_enum_value(value, 2, enum_set));
    CU_ASSERT(db_value_type(value) == DB_TYPE_ENUM);
    CU_ASSERT(!db_value_enum_value(value, &ret));
    CU_ASSERT(ret == 2);
    CU_ASSERT_PTR_NOT_NULL_FATAL(db_value_enum_text(value));
    CU_ASSERT(!strcmp(db_value_enum_text(value), "enum2"));
    CU_ASSERT(!db_value_to_enum_value(value, &ret, enum_set));
    CU_ASSERT(ret == 2);
    CU_ASSERT(!db_value_to_enum_text(value, &enum_text, enum_set));
    CU_ASSERT_PTR_NOT_NULL_FATAL(enum_text);
    CU_ASSERT(!strcmp(enum_text, "enum2"));
    enum_text = NULL;
    CU_ASSERT(!db_value_not_empty(value));
    db_value_reset(value2);
    CU_PASS("db_value_reset");
    CU_ASSERT(!db_value_copy(value2, value));
    CU_ASSERT(db_value_type(value2) == DB_TYPE_ENUM);
    CU_ASSERT(!db_value_enum_value(value2, &ret));
    CU_ASSERT(ret == 2);
    CU_ASSERT_PTR_NOT_NULL_FATAL(db_value_enum_text(value2));
    CU_ASSERT(!strcmp(db_value_enum_text(value2), "enum2"));
    CU_ASSERT(!db_value_to_enum_value(value2, &ret, enum_set));
    CU_ASSERT(ret == 2);
    CU_ASSERT(!db_value_to_enum_text(value2, &enum_text, enum_set));
    CU_ASSERT_PTR_NOT_NULL_FATAL(enum_text);
    CU_ASSERT(!strcmp(enum_text, "enum2"));
    enum_text = NULL;
    CU_ASSERT(!db_value_cmp(value, value2, &ret));
    CU_ASSERT(!ret);
    CU_ASSERT(db_value_set_primary_key(value));
    CU_ASSERT(!db_value_primary_key(value));

    db_value_reset(value);
    CU_PASS("db_value_reset");

    CU_ASSERT(!db_value_from_enum_text(value, "enum2", enum_set));
    CU_ASSERT(db_value_type(value) == DB_TYPE_ENUM);
    CU_ASSERT(!db_value_enum_value(value, &ret));
    CU_ASSERT(ret == 2);
    CU_ASSERT_PTR_NOT_NULL_FATAL(db_value_enum_text(value));
    CU_ASSERT(!strcmp(db_value_enum_text(value), "enum2"));
    CU_ASSERT(!db_value_to_enum_value(value, &ret, enum_set));
    CU_ASSERT(ret == 2);
    CU_ASSERT(!db_value_to_enum_text(value, &enum_text, enum_set));
    CU_ASSERT_PTR_NOT_NULL_FATAL(enum_text);
    CU_ASSERT(!strcmp(enum_text, "enum2"));
    enum_text = NULL;
    CU_ASSERT(!db_value_not_empty(value));
    db_value_reset(value2);
    CU_PASS("db_value_reset");
    CU_ASSERT(!db_value_copy(value2, value));
    CU_ASSERT(db_value_type(value2) == DB_TYPE_ENUM);
    CU_ASSERT(!db_value_enum_value(value2, &ret));
    CU_ASSERT(ret == 2);
    CU_ASSERT_PTR_NOT_NULL_FATAL(db_value_enum_text(value2));
    CU_ASSERT(!strcmp(db_value_enum_text(value2), "enum2"));
    CU_ASSERT(!db_value_to_enum_value(value2, &ret, enum_set));
    CU_ASSERT(ret == 2);
    CU_ASSERT(!db_value_to_enum_text(value2, &enum_text, enum_set));
    CU_ASSERT_PTR_NOT_NULL_FATAL(enum_text);
    CU_ASSERT(!strcmp(enum_text, "enum2"));
    enum_text = NULL;
    CU_ASSERT(!db_value_cmp(value, value2, &ret));
    CU_ASSERT(!ret);
    CU_ASSERT(db_value_set_primary_key(value));
    CU_ASSERT(!db_value_primary_key(value));

    db_value_reset(value);
    CU_PASS("db_value_reset");

    CU_ASSERT(!db_value_from_enum_value(value, 3, enum_set));
    CU_ASSERT(db_value_type(value) == DB_TYPE_ENUM);
    CU_ASSERT(!db_value_enum_value(value, &ret));
    CU_ASSERT(ret == 3);
    CU_ASSERT_PTR_NOT_NULL_FATAL(db_value_enum_text(value));
    CU_ASSERT(!strcmp(db_value_enum_text(value), "enum3"));
    CU_ASSERT(!db_value_to_enum_value(value, &ret, enum_set));
    CU_ASSERT(ret == 3);
    CU_ASSERT(!db_value_to_enum_text(value, &enum_text, enum_set));
    CU_ASSERT_PTR_NOT_NULL_FATAL(enum_text);
    CU_ASSERT(!strcmp(enum_text, "enum3"));
    enum_text = NULL;
    CU_ASSERT(!db_value_not_empty(value));
    db_value_reset(value2);
    CU_PASS("db_value_reset");
    CU_ASSERT(!db_value_copy(value2, value));
    CU_ASSERT(db_value_type(value2) == DB_TYPE_ENUM);
    CU_ASSERT(!db_value_enum_value(value2, &ret));
    CU_ASSERT(ret == 3);
    CU_ASSERT_PTR_NOT_NULL_FATAL(db_value_enum_text(value2));
    CU_ASSERT(!strcmp(db_value_enum_text(value2), "enum3"));
    CU_ASSERT(!db_value_to_enum_value(value2, &ret, enum_set));
    CU_ASSERT(ret == 3);
    CU_ASSERT(!db_value_to_enum_text(value2, &enum_text, enum_set));
    CU_ASSERT_PTR_NOT_NULL_FATAL(enum_text);
    CU_ASSERT(!strcmp(enum_text, "enum3"));
    enum_text = NULL;
    CU_ASSERT(!db_value_cmp(value, value2, &ret));
    CU_ASSERT(!ret);
    CU_ASSERT(db_value_set_primary_key(value));
    CU_ASSERT(!db_value_primary_key(value));

    db_value_reset(value);
    CU_PASS("db_value_reset");

    CU_ASSERT(!db_value_from_enum_text(value, "enum3", enum_set));
    CU_ASSERT(db_value_type(value) == DB_TYPE_ENUM);
    CU_ASSERT(!db_value_enum_value(value, &ret));
    CU_ASSERT(ret == 3);
    CU_ASSERT_PTR_NOT_NULL_FATAL(db_value_enum_text(value));
    CU_ASSERT(!strcmp(db_value_enum_text(value), "enum3"));
    CU_ASSERT(!db_value_to_enum_value(value, &ret, enum_set));
    CU_ASSERT(ret == 3);
    CU_ASSERT(!db_value_to_enum_text(value, &enum_text, enum_set));
    CU_ASSERT_PTR_NOT_NULL_FATAL(enum_text);
    CU_ASSERT(!strcmp(enum_text, "enum3"));
    enum_text = NULL;
    CU_ASSERT(!db_value_not_empty(value));
    db_value_reset(value2);
    CU_PASS("db_value_reset");
    CU_ASSERT(!db_value_copy(value2, value));
    CU_ASSERT(db_value_type(value2) == DB_TYPE_ENUM);
    CU_ASSERT(!db_value_enum_value(value2, &ret));
    CU_ASSERT(ret == 3);
    CU_ASSERT_PTR_NOT_NULL_FATAL(db_value_enum_text(value2));
    CU_ASSERT(!strcmp(db_value_enum_text(value2), "enum3"));
    CU_ASSERT(!db_value_to_enum_value(value2, &ret, enum_set));
    CU_ASSERT(ret == 3);
    CU_ASSERT(!db_value_to_enum_text(value2, &enum_text, enum_set));
    CU_ASSERT_PTR_NOT_NULL_FATAL(enum_text);
    CU_ASSERT(!strcmp(enum_text, "enum3"));
    enum_text = NULL;
    CU_ASSERT(!db_value_cmp(value, value2, &ret));
    CU_ASSERT(!ret);
    CU_ASSERT(db_value_set_primary_key(value));
    CU_ASSERT(!db_value_primary_key(value));

    db_value_reset(value);
    CU_PASS("db_value_reset");

    CU_ASSERT(!db_value_from_enum_value(value, 1, enum_set));
    CU_ASSERT(db_value_type(value) == DB_TYPE_ENUM);
    CU_ASSERT(!db_value_enum_value(value, &ret));
    CU_ASSERT(ret == 1);
    CU_ASSERT_PTR_NOT_NULL_FATAL(db_value_enum_text(value));
    CU_ASSERT(!strcmp(db_value_enum_text(value), "enum1"));
    CU_ASSERT(!db_value_to_enum_value(value, &ret, enum_set));
    CU_ASSERT(ret == 1);
    CU_ASSERT(!db_value_to_enum_text(value, &enum_text, enum_set));
    CU_ASSERT_PTR_NOT_NULL_FATAL(enum_text);
    CU_ASSERT(!strcmp(enum_text, "enum1"));
    enum_text = NULL;
    CU_ASSERT(!db_value_not_empty(value));
    db_value_reset(value2);
    CU_PASS("db_value_reset");
    CU_ASSERT(!db_value_copy(value2, value));
    CU_ASSERT(db_value_type(value2) == DB_TYPE_ENUM);
    CU_ASSERT(!db_value_enum_value(value2, &ret));
    CU_ASSERT(ret == 1);
    CU_ASSERT_PTR_NOT_NULL_FATAL(db_value_enum_text(value2));
    CU_ASSERT(!strcmp(db_value_enum_text(value2), "enum1"));
    CU_ASSERT(!db_value_to_enum_value(value2, &ret, enum_set));
    CU_ASSERT(ret == 1);
    CU_ASSERT(!db_value_to_enum_text(value2, &enum_text, enum_set));
    CU_ASSERT_PTR_NOT_NULL_FATAL(enum_text);
    CU_ASSERT(!strcmp(enum_text, "enum1"));
    enum_text = NULL;
    CU_ASSERT(!db_value_cmp(value, value2, &ret));
    CU_ASSERT(!ret);
    CU_ASSERT(db_value_set_primary_key(value));
    CU_ASSERT(!db_value_primary_key(value));

    db_value_reset(value);
    CU_PASS("db_value_reset");

    CU_ASSERT(!db_value_from_enum_text(value, "enum1", enum_set));
    CU_ASSERT(db_value_type(value) == DB_TYPE_ENUM);
    CU_ASSERT(!db_value_enum_value(value, &ret));
    CU_ASSERT(ret == 1);
    CU_ASSERT_PTR_NOT_NULL_FATAL(db_value_enum_text(value));
    CU_ASSERT(!strcmp(db_value_enum_text(value), "enum1"));
    CU_ASSERT(!db_value_to_enum_value(value, &ret, enum_set));
    CU_ASSERT(ret == 1);
    CU_ASSERT(!db_value_to_enum_text(value, &enum_text, enum_set));
    CU_ASSERT_PTR_NOT_NULL_FATAL(enum_text);
    CU_ASSERT(!strcmp(enum_text, "enum1"));
    enum_text = NULL;
    CU_ASSERT(!db_value_not_empty(value));
    db_value_reset(value2);
    CU_PASS("db_value_reset");
    CU_ASSERT(!db_value_copy(value2, value));
    CU_ASSERT(db_value_type(value2) == DB_TYPE_ENUM);
    CU_ASSERT(!db_value_enum_value(value2, &ret));
    CU_ASSERT(ret == 1);
    CU_ASSERT_PTR_NOT_NULL_FATAL(db_value_enum_text(value2));
    CU_ASSERT(!strcmp(db_value_enum_text(value2), "enum1"));
    CU_ASSERT(!db_value_to_enum_value(value2, &ret, enum_set));
    CU_ASSERT(ret == 1);
    CU_ASSERT(!db_value_to_enum_text(value2, &enum_text, enum_set));
    CU_ASSERT_PTR_NOT_NULL_FATAL(enum_text);
    CU_ASSERT(!strcmp(enum_text, "enum1"));
    enum_text = NULL;
    CU_ASSERT(!db_value_cmp(value, value2, &ret));
    CU_ASSERT(!ret);
    CU_ASSERT(db_value_set_primary_key(value));
    CU_ASSERT(!db_value_primary_key(value));

    db_value_free(value);
    value = NULL;
    CU_PASS("db_value_free");
    db_value_free(value2);
    value2 = NULL;
    CU_PASS("db_value_free");
}
Exemplo n.º 2
0
static int
perform_keystate_list(int sockfd, db_connection_t *dbconn,
        const char* filterZone, char** filterKeytype, char** filterKeystate,
        void (printheader)(int sockfd),
        void (printkey)(int sockfd, zone_t* zone, key_data_t* key, char*tchange, hsm_key_t* hsmKey)) {
    key_data_list_t* key_list;
    key_data_t* key;
    zone_t *zone = NULL;
    char* tchange;
    hsm_key_t *hsmkey;
    int cmp;
    int i, skipPrintKey;

    if (!(key_list = key_data_list_new_get(dbconn))) {
        client_printf_err(sockfd, "Unable to get list of keys, memory "
                "allocation or database error!\n");
        return 1;
    }

    if (printheader) {
        (*printheader)(sockfd);
    }

    while ((key = key_data_list_get_next(key_list))) {
		/* only refetches zone if different from previous */
        if (zone
                && (db_value_cmp(zone_id(zone), key_data_zone_id(key), &cmp)
                || cmp)) {
            zone_free(zone);
            zone = NULL;
        }
        if (!zone) {
            zone = key_data_get_zone(key);
        }
        hsmkey = key_data_get_hsm_key(key);
        key_data_cache_key_states(key);
        tchange = map_keytime(zone, key); /* allocs */
        skipPrintKey = 0;
        if(printkey == NULL)
            skipPrintKey = 1;
        if(filterZone != NULL && strcmp(zone_name(zone), filterZone))
            skipPrintKey = 1;
        for(i=0; filterKeytype && filterKeytype[i]; i++)
            if(!strcasecmp(filterKeytype[i],key_data_role_text(key)))
                break;
        if(filterKeytype && filterKeytype[i] == NULL)
            skipPrintKey = 1;
        for(i=0; filterKeystate && filterKeystate[i]; i++)
            if(!strcasecmp(filterKeystate[i],map_keystate(key)))
                break;
        if(filterKeystate && filterKeystate[i] == NULL)
            skipPrintKey = 1;
        if (!skipPrintKey) {
            (*printkey)(sockfd, zone, key, tchange, hsmkey);
        }
        free(tchange);
        hsm_key_free(hsmkey);
        key_data_free(key);
    }
    zone_free(zone);
    key_data_list_free(key_list);
    return 0;
}