# The contents of this file are subject to the terms of the Common Development and
# Distribution License (the License). You may not use this file except in compliance with the
# License.
#
# You can obtain a copy of the License at legal/CDDLv1.0.txt. See the License for the
# specific language governing permission and limitations under the License.
#
# When distributing Covered Software, include this CDDL Header Notice in each file and include
# the License file at legal/CDDLv1.0.txt. If applicable, add the following below the CDDL
# Header, with the fields enclosed by brackets [] replaced by your own identifying
# information: "Portions copyright [year] [name of copyright owner]".
#
# Copyright 2015 ForgeRock AS.


This directory contains the unit tests for the C OpenAM Web Policy Agent.

Tests are placed in C source files and will look something like the following.  
Let us assume this is the file test_blah.c.  You will definitely need cmocka.h and
for that you will need setjmp.h.
-------------------------------------------------------------------------------------


#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdint.h>
#include <setjmp.h>

#include "cmocka.h"

/**
 * Test the blah functionality.
 */
void test_blah1(void** state) {
    
    // avoids "state not used" messages
    (void)state;
    
    assert_int_equal(AM_OK, AM_OK);

    // etc.
}

void test_blah2(void** state) {

    // etc. etc.
}


-------------------------------------------------------------------------------------
You can build all the tests with:

    make tests

or alternatively if you only want to run the tests in the file, say, test_blah.c then use
this (note you must drop the ".c" suffix from the filename):

    make "TESTS=test_blah" tests

Make invokes sed to produce a number of files, all of which can be ignored except for

    build/tests/tests.h

which will look something like this:

-------------------------------------------------------------------------------------
void test_blah1(void** state) ;
void test_blah2(void** state) ;
const struct CMUnitTest tests[] = {
cmocka_unit_test(test_blah1),
cmocka_unit_test(test_blah2),
};
-------------------------------------------------------------------------------------

Note that tests are only included in the array if:
- the return value is void
- function has single void** parameter called "state"
- the function is "public", as opposed to static
- the function name starts with "test_"
