summaryrefslogtreecommitdiffstats
path: root/security/nss/cmd/libpkix/pkix_pl/system/test_mem.c
blob: 3a4e5f71354e2fd18a00e0c4f6a7c3c5b70776d6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
/*
 * test_mem.c
 *
 * Tests Malloc, Realloc and Free
 *
 */

#include "testutil.h"
#include "testutil_nss.h"

static void *plContext = NULL;

static void
testMalloc(PKIX_UInt32 **array)
{
    PKIX_UInt32 i, arraySize = 10;
    PKIX_TEST_STD_VARS();

    /* Create an integer array of size 10 */
    PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Malloc(
        (PKIX_UInt32)(arraySize * sizeof(unsigned int)),
        (void **)array, plContext));

    /* Fill in some values */
    (void)printf("Setting array[i] = i...\n");
    for (i = 0; i < arraySize; i++) {
        (*array)[i] = i;
        if ((*array)[i] != i)
            testError("Array has incorrect contents");
    }

    /* Memory now reflects changes */
    (void)printf("\tArray: a[0] = %d, a[5] = %d, a[7] = %d.\n",
                 (*array[0]), (*array)[5], (*array)[7]);

cleanup:
    PKIX_TEST_RETURN();
}

static void
testRealloc(PKIX_UInt32 **array)
{
    PKIX_UInt32 i, arraySize = 20;
    PKIX_TEST_STD_VARS();

    PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Realloc(*array,
                                              (PKIX_UInt32)(arraySize *
                                                            sizeof(unsigned int)),
                                              (void **)array, plContext));

    /* Fill in the new elements */
    (void)printf("Setting new portion of array to a[i] = i...\n");
    for (i = arraySize / 2; i < arraySize; i++) {
        (*array)[i] = i;
        if ((*array)[i] != i)
            testError("Array has incorrect contents");
    }

    /* New elements should be reflected. The old should be the same */
    (void)printf("\tArray: a[0] = %d, a[15] = %d, a[17] = %d.\n",
                 (*array)[0], (*array)[15], (*array)[17]);

cleanup:
    PKIX_TEST_RETURN();
}

static void
testFree(PKIX_UInt32 *array)
{

    PKIX_TEST_STD_VARS();
    PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Free(array, plContext));

cleanup:
    PKIX_TEST_RETURN();
}

int
test_mem(int argc, char *argv[])
{

    unsigned int *array = NULL;
    int arraySize = 10;
    PKIX_UInt32 actualMinorVersion;
    PKIX_UInt32 j = 0;

    PKIX_TEST_STD_VARS();

    startTests("Memory Allocation");

    PKIX_TEST_EXPECT_NO_ERROR(
        PKIX_PL_NssContext_Create(0, PKIX_FALSE, NULL, &plContext));

    subTest("PKIX_PL_Malloc");
    testMalloc(&array);

    subTest("PKIX_PL_Realloc");
    testRealloc(&array);

    subTest("PKIX_PL_Free");
    testFree(array);

    /* --Negative Test Cases------------------- */
    /* Create an integer array of size 10 */
    PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Malloc(
        (PKIX_UInt32)(arraySize * sizeof(unsigned int)),
        (void **)&array, plContext));

    (void)printf("Attempting to reallocate 0 sized memory...\n");

    PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Realloc(array, 0, (void **)&array, plContext));

    (void)printf("Attempting to allocate to null pointer...\n");

    PKIX_TEST_EXPECT_ERROR(PKIX_PL_Malloc(10, NULL, plContext));

    (void)printf("Attempting to reallocate to null pointer...\n");

    PKIX_TEST_EXPECT_ERROR(PKIX_PL_Realloc(NULL, 10, NULL, plContext));

    PKIX_TEST_EXPECT_NO_ERROR(PKIX_PL_Free(array, plContext));

cleanup:

    PKIX_Shutdown(plContext);

    endTests("Memory Allocation");

    return (0);
}