hash: fix allocation of an existing object
[dpdk.git] / app / test / test_hash.c
index 2f3d884..adbdb4a 100644 (file)
@@ -805,15 +805,11 @@ fbk_hash_unit_test(void)
        RETURN_IF_ERROR_FBK(handle == NULL, "fbk hash creation should have succeeded");
 
        tmp = rte_fbk_hash_create(&invalid_params_same_name_2);
-       RETURN_IF_ERROR_FBK(tmp == NULL, "fbk hash creation should have succeeded");
-       if (tmp != handle) {
-                       printf("ERROR line %d: hashes should have been the same\n", __LINE__);
-                       rte_fbk_hash_free(handle);
-                       rte_fbk_hash_free(tmp);
-                       return -1;
-       }
+       if (tmp != NULL)
+               rte_fbk_hash_free(tmp);
+       RETURN_IF_ERROR_FBK(tmp != NULL, "fbk hash creation should have failed");
 
-       /* we are not freeing tmp or handle here because we need a hash list
+       /* we are not freeing  handle here because we need a hash list
         * to be not empty for the next test */
 
        /* create a hash in non-empty list - good for coverage */
@@ -988,7 +984,7 @@ static int test_fbk_hash_find_existing(void)
  */
 static int test_hash_creation_with_bad_parameters(void)
 {
-       struct rte_hash *handle;
+       struct rte_hash *handle, *tmp;
        struct rte_hash_parameters params;
 
        handle = rte_hash_create(NULL);
@@ -1038,7 +1034,23 @@ static int test_hash_creation_with_bad_parameters(void)
                return -1;
        }
 
+       /* test with same name should fail */
+       memcpy(&params, &ut_params, sizeof(params));
+       params.name = "same_name";
+       handle = rte_hash_create(&params);
+       if (handle == NULL) {
+               printf("Cannot create first hash table with 'same_name'\n");
+               return -1;
+       }
+       tmp = rte_hash_create(&params);
+       if (tmp != NULL) {
+               printf("Creation of hash table with same name should fail\n");
+               rte_hash_free(handle);
+               rte_hash_free(tmp);
+               return -1;
+       }
        rte_hash_free(handle);
+
        printf("# Test successful. No more errors expected\n");
 
        return 0;
@@ -1051,12 +1063,12 @@ static int test_hash_creation_with_bad_parameters(void)
 static int
 test_hash_creation_with_good_parameters(void)
 {
-       struct rte_hash *handle, *tmp;
+       struct rte_hash *handle;
        struct rte_hash_parameters params;
 
        /* create with null hash function - should choose DEFAULT_HASH_FUNC */
        memcpy(&params, &ut_params, sizeof(params));
-       params.name = "same_name";
+       params.name = "name";
        params.hash_func = NULL;
        handle = rte_hash_create(&params);
        if (handle == NULL) {
@@ -1064,37 +1076,6 @@ test_hash_creation_with_good_parameters(void)
                return -1;
        }
 
-       /* this test is trying to create a hash with the same name as previous one.
-        * this should return a pointer to the hash we previously created.
-        * the previous hash isn't freed exactly for the purpose of it being in
-        * the hash list.
-        */
-       memcpy(&params, &ut_params, sizeof(params));
-       params.name = "same_name";
-       tmp = rte_hash_create(&params);
-
-       /* check if the returned handle is actually equal to the previous hash */
-       if (handle != tmp) {
-               rte_hash_free(handle);
-               rte_hash_free(tmp);
-               printf("Creating hash with existing name was successful\n");
-               return -1;
-       }
-
-       /* try creating hash when there already are hashes in the list.
-        * the previous hash is not freed to have a non-empty hash list.
-        * the other hash that's in the list is still pointed to by "handle" var.
-        */
-       memcpy(&params, &ut_params, sizeof(params));
-       params.name = "different_name";
-       tmp = rte_hash_create(&params);
-       if (tmp == NULL) {
-               rte_hash_free(handle);
-               printf("Creating hash with valid parameters failed\n");
-               return -1;
-       }
-
-       rte_hash_free(tmp);
        rte_hash_free(handle);
 
        return 0;