blob: 22b04b7687d62a95cb225e3468e6d7e242832a1f [file]
/**
*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.
*/
/*
* utils_test.cpp
*
* \date Feb 6, 2013
* \author <a href="mailto:dev@celix.apache.org">Apache Celix Project Team</a>
* \copyright Apache License, Version 2.0
*/
#include "string.h"
#include <stdlib.h>
#include <string.h>
#include "CppUTest/TestHarness.h"
#include "CppUTest/TestHarness_c.h"
#include "CppUTest/CommandLineTestRunner.h"
extern "C"
{
#include "utils.h"
}
int main(int argc, char** argv) {
return RUN_ALL_TESTS(argc, argv);
}
TEST_GROUP(utils) {
void setup(void) {
}
void teardown() {
}
};
static char* my_strdup(const char* s){
if(s==NULL){
return NULL;
}
size_t len = strlen(s);
char *d = (char*) calloc (len + 1,sizeof(char));
if (d == NULL){
return NULL;
}
strncpy (d,s,len);
return d;
}
TEST(utils, stringHash) {
char * toHash = my_strdup("abc");
unsigned int hash;
hash = utils_stringHash((void *) toHash);
LONGS_EQUAL(193485928, hash);
free(toHash);
toHash = my_strdup("abc123def456ghi789jkl012mno345pqr678stu901vwx234yz");
hash = utils_stringHash((void *) toHash);
LONGS_EQUAL(3704717399, hash);
free(toHash);
toHash = my_strdup("abc123def456ghi789jkl012mno345pqr678stu901vwx234yz"
"abc123def456ghi789jkl012mno345pqr678stu901vwx234yz"
"abc123def456ghi789jkl012mno345pqr678stu901vwx234yz"
"abc123def456ghi789jkl012mno345pqr678stu901vwx234yz"
"abc123def456ghi789jkl012mno345pqr678stu901vwx234yz"
"abc123def456ghi789jkl012mno345pqr678stu901vwx234yz"
"abc123def456ghi789jkl012mno345pqr678stu901vwx234yz"
"abc123def456ghi789jkl012mno345pqr678stu901vwx234yz"
"abc123def456ghi789jkl012mno345pqr678stu901vwx234yz"
"abc123def456ghi789jkl012mno345pqr678stu901vwx234yz"
"abc123def456ghi789jkl012mno345pqr678stu901vwx234yz"
"abc123def456ghi789jkl012mno345pqr678stu901vwx234yz"
"abc123def456ghi789jkl012mno345pqr678stu901vwx234yz"
"abc123def456ghi789jkl012mno345pqr678stu901vwx234yz"
"abc123def456ghi789jkl012mno345pqr678stu901vwx234yz"
"abc123def456ghi789jkl012mno345pqr678stu901vwx234yz"
"abc123def456ghi789jkl012mno345pqr678stu901vwx234yz"
"abc123def456ghi789jkl012mno345pqr678stu901vwx234yz"
"abc123def456ghi789jkl012mno345pqr678stu901vwx234yz"
"abc123def456ghi789jkl012mno345pqr678stu901vwx234yz"
"abc123def456ghi789jkl012mno345pqr678stu901vwx234yz"
"abc123def456ghi789jkl012mno345pqr678stu901vwx234yz");
hash = utils_stringHash((void *) toHash);
LONGS_EQUAL(3862509969, hash);
free(toHash);
}
TEST(utils, stringEquals) {
// Compare with equal strings
char * org = my_strdup("abc");
char * cmp = my_strdup("abc");
int result = utils_stringEquals((void *) org, (void *) cmp);
CHECK(result);
// Compare with no equal strings
free(cmp);
cmp = my_strdup("abcd");
result = utils_stringEquals((void *) org, (void *) cmp);
CHECK_FALSE(result);
// Compare with numeric strings
free(org);
free(cmp);
org = my_strdup("123");
cmp = my_strdup("123");
result = utils_stringEquals((void *) org, (void *) cmp);
CHECK(result);
// Compare with long strings
free(org);
free(cmp);
org = my_strdup("abc123def456ghi789jkl012mno345pqr678stu901vwx234yz"
"abc123def456ghi789jkl012mno345pqr678stu901vwx234yz"
"abc123def456ghi789jkl012mno345pqr678stu901vwx234yz"
"abc123def456ghi789jkl012mno345pqr678stu901vwx234yz"
"abc123def456ghi789jkl012mno345pqr678stu901vwx234yz"
"abc123def456ghi789jkl012mno345pqr678stu901vwx234yz"
"abc123def456ghi789jkl012mno345pqr678stu901vwx234yz"
"abc123def456ghi789jkl012mno345pqr678stu901vwx234yz"
"abc123def456ghi789jkl012mno345pqr678stu901vwx234yz"
"abc123def456ghi789jkl012mno345pqr678stu901vwx234yz"
"abc123def456ghi789jkl012mno345pqr678stu901vwx234yz"
"abc123def456ghi789jkl012mno345pqr678stu901vwx234yz"
"abc123def456ghi789jkl012mno345pqr678stu901vwx234yz"
"abc123def456ghi789jkl012mno345pqr678stu901vwx234yz"
"abc123def456ghi789jkl012mno345pqr678stu901vwx234yz"
"abc123def456ghi789jkl012mno345pqr678stu901vwx234yz"
"abc123def456ghi789jkl012mno345pqr678stu901vwx234yz"
"abc123def456ghi789jkl012mno345pqr678stu901vwx234yz"
"abc123def456ghi789jkl012mno345pqr678stu901vwx234yz"
"abc123def456ghi789jkl012mno345pqr678stu901vwx234yz"
"abc123def456ghi789jkl012mno345pqr678stu901vwx234yz"
"abc123def456ghi789jkl012mno345pqr678stu901vwx234yz");
cmp = my_strdup("abc123def456ghi789jkl012mno345pqr678stu901vwx234yz"
"abc123def456ghi789jkl012mno345pqr678stu901vwx234yz"
"abc123def456ghi789jkl012mno345pqr678stu901vwx234yz"
"abc123def456ghi789jkl012mno345pqr678stu901vwx234yz"
"abc123def456ghi789jkl012mno345pqr678stu901vwx234yz"
"abc123def456ghi789jkl012mno345pqr678stu901vwx234yz"
"abc123def456ghi789jkl012mno345pqr678stu901vwx234yz"
"abc123def456ghi789jkl012mno345pqr678stu901vwx234yz"
"abc123def456ghi789jkl012mno345pqr678stu901vwx234yz"
"abc123def456ghi789jkl012mno345pqr678stu901vwx234yz"
"abc123def456ghi789jkl012mno345pqr678stu901vwx234yz"
"abc123def456ghi789jkl012mno345pqr678stu901vwx234yz"
"abc123def456ghi789jkl012mno345pqr678stu901vwx234yz"
"abc123def456ghi789jkl012mno345pqr678stu901vwx234yz"
"abc123def456ghi789jkl012mno345pqr678stu901vwx234yz"
"abc123def456ghi789jkl012mno345pqr678stu901vwx234yz"
"abc123def456ghi789jkl012mno345pqr678stu901vwx234yz"
"abc123def456ghi789jkl012mno345pqr678stu901vwx234yz"
"abc123def456ghi789jkl012mno345pqr678stu901vwx234yz"
"abc123def456ghi789jkl012mno345pqr678stu901vwx234yz"
"abc123def456ghi789jkl012mno345pqr678stu901vwx234yz"
"abc123def456ghi789jkl012mno345pqr678stu901vwx234yz");
result = utils_stringEquals((void *) org, (void *) cmp);
CHECK(result);
free(org);
free(cmp);
}
TEST(utils, string_ndup){
// Compare with equal strings
const char * org = "abc";
char * cmp = NULL;
cmp = string_ndup(org, 3);
STRCMP_EQUAL(org, cmp);
free(cmp);
org = "abc123def456ghi789jkl012mno345pqr678stu901vwx234yz";
cmp = string_ndup(org, 50);
STRCMP_EQUAL(org, cmp);
free(cmp);
cmp = string_ndup(org, 25);
LONGS_EQUAL(25, strlen(cmp));
free(cmp);
}
TEST(utils, stringTrim) {
// Multiple whitespaces, before, after and in between
char * toTrim = my_strdup(" a b c ");
char * result = utils_stringTrim(toTrim);
STRCMP_EQUAL("a b c", result);
// No whitespaces
free(toTrim);
toTrim = my_strdup("abc");
result = utils_stringTrim(toTrim);
STRCMP_EQUAL("abc", result);
// Only whitespace before
free(toTrim);
toTrim = my_strdup(" abc");
result = utils_stringTrim(toTrim);
STRCMP_EQUAL("abc", result);
// Only whitespace after
free(toTrim);
toTrim = my_strdup("abc ");
result = utils_stringTrim(toTrim);
STRCMP_EQUAL("abc", result);
// Whitespace other then space (tab, cr..).
free(toTrim);
toTrim = my_strdup("\tabc \n asdf \n");
result = utils_stringTrim(toTrim);
STRCMP_EQUAL("abc \n asdf", result);
free(toTrim);
}
TEST(utils, thread_equalsSelf){
celix_thread thread = celixThread_self();
bool get;
LONGS_EQUAL(CELIX_SUCCESS, thread_equalsSelf(thread, &get));
CHECK(get);
thread.thread = (pthread_t) 0x42;
LONGS_EQUAL(CELIX_SUCCESS, thread_equalsSelf(thread, &get));
CHECK_FALSE(get);
}
TEST(utils, isNumeric) {
// Check numeric string
char * toCheck = my_strdup("42");
bool result;
celix_status_t status = utils_isNumeric(toCheck, &result);
LONGS_EQUAL(CELIX_SUCCESS, status);
CHECK_C(result);
// Check non numeric string
free(toCheck);
toCheck = my_strdup("42b");
status = utils_isNumeric(toCheck, &result);
LONGS_EQUAL(CELIX_SUCCESS, status);
CHECK_C(!result);
free(toCheck);
}
TEST(utils, compareServiceIdsAndRanking){
int ret;
//service 1 is higher ranked and has a irrelevant ID
ret = utils_compareServiceIdsAndRanking(2,2,1,1);
LONGS_EQUAL(1, ret);
//service 1 is equally ranked and has a lower ID
ret = utils_compareServiceIdsAndRanking(1,1,2,1);
LONGS_EQUAL(1, ret);
//service 1 is equally ranked and has a higher ID
ret = utils_compareServiceIdsAndRanking(2,1,1,1);
LONGS_EQUAL(-1, ret);
//service 1 is lower ranked and has a irrelevant ID
ret = utils_compareServiceIdsAndRanking(1,1,2,2);
LONGS_EQUAL(-1, ret);
//service 1 is equal in ID and irrelevantly ranked
ret = utils_compareServiceIdsAndRanking(1,1,1,1);
LONGS_EQUAL(0, ret);
}