diff options
author | NingSun <ning.sun@intel.com> | 2018-02-08 08:34:03 -0800 |
---|---|---|
committer | NingSun <ning.sun@intel.com> | 2018-02-08 09:14:52 -0800 |
commit | 0c89b3ccba7c9b7332ab67ae1936aff51ca62367 (patch) | |
tree | 70c1b1d160d4c6d0a83395ca9a87c1264d0d3439 /SoftHSMv2/src/lib/slot_mgr/test/SlotManagerTests.cpp | |
parent | 945613b4db4e07f75d2bc7463db580ddfaa700fd (diff) |
Initial sshsm project structure
Issue-ID: AAF-94
Change-Id: I5e82fff418e7567b161acf9b98013a9b85ffc5b4
Signed-off-by: NingSun <ning.sun@intel.com>
Diffstat (limited to 'SoftHSMv2/src/lib/slot_mgr/test/SlotManagerTests.cpp')
-rw-r--r-- | SoftHSMv2/src/lib/slot_mgr/test/SlotManagerTests.cpp | 485 |
1 files changed, 485 insertions, 0 deletions
diff --git a/SoftHSMv2/src/lib/slot_mgr/test/SlotManagerTests.cpp b/SoftHSMv2/src/lib/slot_mgr/test/SlotManagerTests.cpp new file mode 100644 index 0000000..c5f6687 --- /dev/null +++ b/SoftHSMv2/src/lib/slot_mgr/test/SlotManagerTests.cpp @@ -0,0 +1,485 @@ +/* + * Copyright (c) 2010 SURFnet bv + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER + * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN + * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/***************************************************************************** + SlotManagerTests.cpp + + Contains test cases to test the object store implementation + *****************************************************************************/ + +#include <stdlib.h> +#include <string.h> +#include <cppunit/extensions/HelperMacros.h> +#include "SlotManagerTests.h" +#include "SlotManager.h" +#include "Token.h" +#include "ObjectStore.h" +#include "ObjectFile.h" +#include "File.h" +#include "Directory.h" +#include "OSAttribute.h" +#include "OSAttributes.h" +#include "CryptoFactory.h" +#include "cryptoki.h" + +CPPUNIT_TEST_SUITE_REGISTRATION(SlotManagerTests); + +void SlotManagerTests::setUp() +{ + CPPUNIT_ASSERT(!system("mkdir testdir")); +} + +void SlotManagerTests::tearDown() +{ +#ifndef _WIN32 + CPPUNIT_ASSERT(!system("rm -rf testdir")); +#else + CPPUNIT_ASSERT(!system("rmdir /s /q testdir 2> nul")); +#endif +} + +void SlotManagerTests::testNoExistingTokens() +{ + // Create an empty object store +#ifndef _WIN32 + ObjectStore store("./testdir"); +#else + ObjectStore store(".\\testdir"); +#endif + + // Create the slot manager + SlotManager slotManager(&store); + + CPPUNIT_ASSERT(slotManager.getSlots().size() == 1); + + // Test C_GetSlotList + CK_SLOT_ID testList[10]; + CK_ULONG ulCount = 10; + + CPPUNIT_ASSERT(slotManager.getSlotList(&store, CK_FALSE, testList, &ulCount) == CKR_OK); + CPPUNIT_ASSERT(ulCount == 1); + + ulCount = 10; + + CPPUNIT_ASSERT(slotManager.getSlotList(&store, CK_TRUE, testList, &ulCount) == CKR_OK); + CPPUNIT_ASSERT(ulCount == 1); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[0]]->getSlotID() == testList[0]); + + // Retrieve slot information about the first slot + CK_SLOT_INFO slotInfo; + + CPPUNIT_ASSERT(slotManager.getSlots()[testList[0]]->getSlotInfo(&slotInfo) == CKR_OK); + + CPPUNIT_ASSERT((slotInfo.flags & CKF_TOKEN_PRESENT) == CKF_TOKEN_PRESENT); + + // Retrieve token information about the token in the first slot + CK_TOKEN_INFO tokenInfo; + + CPPUNIT_ASSERT(slotManager.getSlots()[testList[0]]->getToken() != NULL); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[0]]->getToken()->getTokenInfo(&tokenInfo) == CKR_OK); + + CPPUNIT_ASSERT((tokenInfo.flags & CKF_TOKEN_INITIALIZED) != CKF_TOKEN_INITIALIZED); +} + +void SlotManagerTests::testExistingTokens() +{ + // Create an empty object store +#ifndef _WIN32 + ObjectStore store("./testdir"); +#else + ObjectStore store(".\\testdir"); +#endif + + // Create two tokens + ByteString label1 = "DEADBEEF"; + ByteString label2 = "DEADC0FFEE"; + + CPPUNIT_ASSERT(store.newToken(label1) != NULL); + CPPUNIT_ASSERT(store.newToken(label2) != NULL); + + // Now attach the slot manager + SlotManager slotManager(&store); + + CPPUNIT_ASSERT(slotManager.getSlots().size() == 3); + + // Test C_GetSlotList + CK_SLOT_ID testList[10]; + CK_ULONG ulCount = 10; + + CPPUNIT_ASSERT(slotManager.getSlotList(&store, CK_FALSE, testList, &ulCount) == CKR_OK); + CPPUNIT_ASSERT(ulCount == 3); + + ulCount = 10; + + CPPUNIT_ASSERT(slotManager.getSlotList(&store, CK_TRUE, testList, &ulCount) == CKR_OK); + CPPUNIT_ASSERT(ulCount == 3); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[0]]->getSlotID() == testList[0]); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[1]]->getSlotID() == testList[1]); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[2]]->getSlotID() == testList[2]); + + // Retrieve slot information about the first slot + CK_SLOT_INFO slotInfo; + + CPPUNIT_ASSERT(slotManager.getSlots()[testList[0]]->getSlotInfo(&slotInfo) == CKR_OK); + + CPPUNIT_ASSERT((slotInfo.flags & CKF_TOKEN_PRESENT) == CKF_TOKEN_PRESENT); + + // Retrieve token information about the token in the first slot + CK_TOKEN_INFO tokenInfo; + + CPPUNIT_ASSERT(slotManager.getSlots()[testList[0]]->getToken() != NULL); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[0]]->getToken()->getTokenInfo(&tokenInfo) == CKR_OK); + + CPPUNIT_ASSERT((tokenInfo.flags & CKF_TOKEN_INITIALIZED) == CKF_TOKEN_INITIALIZED); + CPPUNIT_ASSERT(!memcmp(tokenInfo.label, &label1[0], label1.size()) || + !memcmp(tokenInfo.label, &label2[0], label2.size())); + + // Retrieve slot information about the second slot + CPPUNIT_ASSERT(slotManager.getSlots()[testList[1]]->getSlotInfo(&slotInfo) == CKR_OK); + + CPPUNIT_ASSERT((slotInfo.flags & CKF_TOKEN_PRESENT) == CKF_TOKEN_PRESENT); + + // Retrieve token information about the token in the second slot + CPPUNIT_ASSERT(slotManager.getSlots()[testList[1]]->getToken() != NULL); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[1]]->getToken()->getTokenInfo(&tokenInfo) == CKR_OK); + + CPPUNIT_ASSERT((tokenInfo.flags & CKF_TOKEN_INITIALIZED) == CKF_TOKEN_INITIALIZED); + CPPUNIT_ASSERT(!memcmp(tokenInfo.label, &label1[0], label1.size()) || + !memcmp(tokenInfo.label, &label2[0], label2.size())); + + // Retrieve slot information about the third slot + CPPUNIT_ASSERT(slotManager.getSlots()[testList[2]]->getSlotInfo(&slotInfo) == CKR_OK); + + CPPUNIT_ASSERT((slotInfo.flags & CKF_TOKEN_PRESENT) == CKF_TOKEN_PRESENT); + + // Retrieve token information about the token in the third slot + CPPUNIT_ASSERT(slotManager.getSlots()[testList[2]]->getToken() != NULL); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[2]]->getToken()->getTokenInfo(&tokenInfo) == CKR_OK); + + CPPUNIT_ASSERT((tokenInfo.flags & CKF_TOKEN_INITIALIZED) != CKF_TOKEN_INITIALIZED); +} + +void SlotManagerTests::testInitialiseTokenInLastSlot() +{ + { + // Create an empty object store +#ifndef _WIN32 + ObjectStore store("./testdir"); +#else + ObjectStore store(".\\testdir"); +#endif + + // Create the slot manager + SlotManager slotManager(&store); + + CPPUNIT_ASSERT(slotManager.getSlots().size() == 1); + + // Test C_GetSlotList + CK_SLOT_ID testList[10]; + CK_ULONG ulCount = 10; + + CPPUNIT_ASSERT(slotManager.getSlotList(&store, CK_FALSE, testList, &ulCount) == CKR_OK); + CPPUNIT_ASSERT(ulCount == 1); + + ulCount = 10; + + CPPUNIT_ASSERT(slotManager.getSlotList(&store, CK_TRUE, testList, &ulCount) == CKR_OK); + CPPUNIT_ASSERT(ulCount == 1); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[0]]->getSlotID() == testList[0]); + + // Retrieve slot information about the first slot + CK_SLOT_INFO slotInfo; + + CPPUNIT_ASSERT(slotManager.getSlots()[testList[0]]->getSlotInfo(&slotInfo) == CKR_OK); + + CPPUNIT_ASSERT((slotInfo.flags & CKF_TOKEN_PRESENT) == CKF_TOKEN_PRESENT); + + // Retrieve token information about the token in the first slot + CK_TOKEN_INFO tokenInfo; + + CPPUNIT_ASSERT(slotManager.getSlots()[testList[0]]->getToken() != NULL); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[0]]->getToken()->getTokenInfo(&tokenInfo) == CKR_OK); + + CPPUNIT_ASSERT((tokenInfo.flags & CKF_TOKEN_INITIALIZED) != CKF_TOKEN_INITIALIZED); + + // Now initialise the token in the first slot + ByteString soPIN((unsigned char*)"1234", 4); + CK_UTF8CHAR label[33] = "My test token "; + + CPPUNIT_ASSERT(slotManager.getSlots()[testList[0]]->initToken(soPIN, label) == CKR_OK); + + // Retrieve slot information about the first slot + CPPUNIT_ASSERT(slotManager.getSlots()[testList[0]]->getSlotInfo(&slotInfo) == CKR_OK); + + CPPUNIT_ASSERT((slotInfo.flags & CKF_TOKEN_PRESENT) == CKF_TOKEN_PRESENT); + + // Retrieve token information about the token in the first slot + CPPUNIT_ASSERT(slotManager.getSlots()[testList[0]]->getToken() != NULL); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[0]]->getToken()->getTokenInfo(&tokenInfo) == CKR_OK); + + CPPUNIT_ASSERT((tokenInfo.flags & CKF_TOKEN_INITIALIZED) == CKF_TOKEN_INITIALIZED); + CPPUNIT_ASSERT(!memcmp(tokenInfo.label, label, 32)); + } + + // Attach a fresh slot manager +#ifndef _WIN32 + ObjectStore store("./testdir"); +#else + ObjectStore store(".\\testdir"); +#endif + SlotManager slotManager(&store); + + CPPUNIT_ASSERT(slotManager.getSlots().size() == 2); + + // Test C_GetSlotList + CK_SLOT_ID testList[10]; + CK_ULONG ulCount = 10; + + CPPUNIT_ASSERT(slotManager.getSlotList(&store, CK_FALSE, testList, &ulCount) == CKR_OK); + CPPUNIT_ASSERT(ulCount == 2); + + ulCount = 10; + + CPPUNIT_ASSERT(slotManager.getSlotList(&store, CK_TRUE, testList, &ulCount) == CKR_OK); + CPPUNIT_ASSERT(ulCount == 2); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[0]]->getSlotID() == testList[0]); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[1]]->getSlotID() == testList[1]); + + // Retrieve slot information about the first slot + CK_SLOT_INFO slotInfo; + + CPPUNIT_ASSERT(slotManager.getSlots()[testList[0]]->getSlotInfo(&slotInfo) == CKR_OK); + + CPPUNIT_ASSERT((slotInfo.flags & CKF_TOKEN_PRESENT) == CKF_TOKEN_PRESENT); + + // Retrieve token information about the token in the first slot + CK_TOKEN_INFO tokenInfo; + + CPPUNIT_ASSERT(slotManager.getSlots()[testList[0]]->getToken() != NULL); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[0]]->getToken()->getTokenInfo(&tokenInfo) == CKR_OK); + + CPPUNIT_ASSERT((tokenInfo.flags & CKF_TOKEN_INITIALIZED) == CKF_TOKEN_INITIALIZED); + + CK_UTF8CHAR label[33] = "My test token "; + CPPUNIT_ASSERT(!memcmp(tokenInfo.label, label, 32)); + + // Retrieve slot information about the second slot + CPPUNIT_ASSERT(slotManager.getSlots()[testList[1]]->getSlotInfo(&slotInfo) == CKR_OK); + + CPPUNIT_ASSERT((slotInfo.flags & CKF_TOKEN_PRESENT) == CKF_TOKEN_PRESENT); + + // Retrieve token information about the token in the second slot + CPPUNIT_ASSERT(slotManager.getSlots()[testList[1]]->getToken() != NULL); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[1]]->getToken()->getTokenInfo(&tokenInfo) == CKR_OK); + + CPPUNIT_ASSERT((tokenInfo.flags & CKF_TOKEN_INITIALIZED) != CKF_TOKEN_INITIALIZED); +} + +void SlotManagerTests::testReinitialiseExistingToken() +{ + // Create an empty object store +#ifndef _WIN32 + ObjectStore store("./testdir"); +#else + ObjectStore store(".\\testdir"); +#endif + + // Create two tokens + ByteString label1 = "DEADBEEF"; + ByteString label2 = "DEADC0FFEE"; + + CPPUNIT_ASSERT(store.newToken(label1) != NULL); + CPPUNIT_ASSERT(store.newToken(label2) != NULL); + + // Now attach the slot manager + SlotManager slotManager(&store); + + CPPUNIT_ASSERT(slotManager.getSlots().size() == 3); + + // Test C_GetSlotList + CK_SLOT_ID testList[10]; + CK_ULONG ulCount = 10; + + CPPUNIT_ASSERT(slotManager.getSlotList(&store, CK_FALSE, testList, &ulCount) == CKR_OK); + CPPUNIT_ASSERT(ulCount == 3); + + ulCount = 10; + + CPPUNIT_ASSERT(slotManager.getSlotList(&store, CK_TRUE, testList, &ulCount) == CKR_OK); + CPPUNIT_ASSERT(ulCount == 3); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[0]]->getSlotID() == testList[0]); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[1]]->getSlotID() == testList[1]); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[2]]->getSlotID() == testList[2]); + + // Retrieve slot information about the first slot + CK_SLOT_INFO slotInfo; + + CPPUNIT_ASSERT(slotManager.getSlots()[testList[0]]->getSlotInfo(&slotInfo) == CKR_OK); + + CPPUNIT_ASSERT((slotInfo.flags & CKF_TOKEN_PRESENT) == CKF_TOKEN_PRESENT); + + // Retrieve token information about the token in the first slot + CK_TOKEN_INFO tokenInfo; + + CPPUNIT_ASSERT(slotManager.getSlots()[testList[0]]->getToken() != NULL); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[0]]->getToken()->getTokenInfo(&tokenInfo) == CKR_OK); + + CPPUNIT_ASSERT((tokenInfo.flags & CKF_TOKEN_INITIALIZED) == CKF_TOKEN_INITIALIZED); + CPPUNIT_ASSERT(!memcmp(tokenInfo.label, &label1[0], label1.size()) || + !memcmp(tokenInfo.label, &label2[0], label2.size())); + + // Retrieve slot information about the second slot + CPPUNIT_ASSERT(slotManager.getSlots()[testList[1]]->getSlotInfo(&slotInfo) == CKR_OK); + + CPPUNIT_ASSERT((slotInfo.flags & CKF_TOKEN_PRESENT) == CKF_TOKEN_PRESENT); + + // Retrieve token information about the token in the second slot + CPPUNIT_ASSERT(slotManager.getSlots()[testList[1]]->getToken() != NULL); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[1]]->getToken()->getTokenInfo(&tokenInfo) == CKR_OK); + + CPPUNIT_ASSERT((tokenInfo.flags & CKF_TOKEN_INITIALIZED) == CKF_TOKEN_INITIALIZED); + CPPUNIT_ASSERT(!memcmp(tokenInfo.label, &label1[0], label1.size()) || + !memcmp(tokenInfo.label, &label2[0], label2.size())); + + // Retrieve slot information about the third slot + CPPUNIT_ASSERT(slotManager.getSlots()[testList[2]]->getSlotInfo(&slotInfo) == CKR_OK); + + CPPUNIT_ASSERT((slotInfo.flags & CKF_TOKEN_PRESENT) == CKF_TOKEN_PRESENT); + + // Retrieve token information about the token in the third slot + CPPUNIT_ASSERT(slotManager.getSlots()[testList[2]]->getToken() != NULL); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[2]]->getToken()->getTokenInfo(&tokenInfo) == CKR_OK); + + CPPUNIT_ASSERT((tokenInfo.flags & CKF_TOKEN_INITIALIZED) != CKF_TOKEN_INITIALIZED); + + // Now reinitialise the token in the second slot + ByteString soPIN((unsigned char*)"1234", 4); + CK_UTF8CHAR label[33] = "My test token "; + + CPPUNIT_ASSERT(slotManager.getSlots()[testList[1]]->initToken(soPIN, label) == CKR_OK); + + // Retrieve slot information about the first slot + CPPUNIT_ASSERT(slotManager.getSlots()[testList[1]]->getSlotInfo(&slotInfo) == CKR_OK); + + CPPUNIT_ASSERT((slotInfo.flags & CKF_TOKEN_PRESENT) == CKF_TOKEN_PRESENT); + + // Retrieve token information about the token in the first slot + CPPUNIT_ASSERT(slotManager.getSlots()[testList[1]]->getToken() != NULL); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[1]]->getToken()->getTokenInfo(&tokenInfo) == CKR_OK); + + CPPUNIT_ASSERT((tokenInfo.flags & CKF_TOKEN_INITIALIZED) == CKF_TOKEN_INITIALIZED); + CPPUNIT_ASSERT(!memcmp(tokenInfo.label, label, 32)); +} + +void SlotManagerTests::testUninitialisedToken() +{ + // Create an empty object store +#ifndef _WIN32 + ObjectStore store("./testdir"); +#else + ObjectStore store(".\\testdir"); +#endif + + // Now attach the slot manager + SlotManager slotManager(&store); + + CPPUNIT_ASSERT(slotManager.getSlots().size() == 1); + + // Test C_GetSlotList + CK_SLOT_ID testList[10]; + CK_ULONG ulCount = 10; + + CPPUNIT_ASSERT(slotManager.getSlotList(&store, CK_FALSE, testList, &ulCount) == CKR_OK); + CPPUNIT_ASSERT(ulCount == 1); + ulCount = 10; + CPPUNIT_ASSERT(slotManager.getSlotList(&store, CK_TRUE, testList, &ulCount) == CKR_OK); + CPPUNIT_ASSERT(ulCount == 1); + + // Initialise the token in the first slot + ByteString soPIN((unsigned char*)"1234", 4); + CK_UTF8CHAR label[33] = "My test token "; + CPPUNIT_ASSERT(slotManager.getSlots()[testList[0]]->initToken(soPIN, label) == CKR_OK); + + // Check if a new slot is added + ulCount = 10; + CPPUNIT_ASSERT(slotManager.getSlotList(&store, CK_FALSE, testList, &ulCount) == CKR_OK); + CPPUNIT_ASSERT(ulCount == 1); + ulCount = 10; + CPPUNIT_ASSERT(slotManager.getSlotList(&store, CK_TRUE, testList, &ulCount) == CKR_OK); + CPPUNIT_ASSERT(ulCount == 1); + ulCount = 10; + CPPUNIT_ASSERT(slotManager.getSlotList(&store, CK_FALSE, NULL_PTR, &ulCount) == CKR_OK); + CPPUNIT_ASSERT(ulCount == 2); + ulCount = 10; + CPPUNIT_ASSERT(slotManager.getSlotList(&store, CK_TRUE, NULL_PTR, &ulCount) == CKR_OK); + CPPUNIT_ASSERT(ulCount == 2); + + // get new list + CPPUNIT_ASSERT(slotManager.getSlotList(&store, CK_TRUE, testList, &ulCount) == CKR_OK); + CPPUNIT_ASSERT(ulCount == 2); + + // Retrieve token information about the tokens + CK_TOKEN_INFO tokenInfo; + CPPUNIT_ASSERT(slotManager.getSlots()[testList[0]]->getToken() != NULL); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[0]]->getToken()->getTokenInfo(&tokenInfo) == CKR_OK); + CPPUNIT_ASSERT((tokenInfo.flags & CKF_TOKEN_INITIALIZED) == CKF_TOKEN_INITIALIZED); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[1]]->getToken() != NULL); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[1]]->getToken()->getTokenInfo(&tokenInfo) == CKR_OK); + CPPUNIT_ASSERT((tokenInfo.flags & CKF_TOKEN_INITIALIZED) != CKF_TOKEN_INITIALIZED); + + // Initialise the token in the second slot + CPPUNIT_ASSERT(slotManager.getSlots()[testList[1]]->initToken(soPIN, label) == CKR_OK); + + // Check if a new slot is added + ulCount = 10; + CPPUNIT_ASSERT(slotManager.getSlotList(&store, CK_FALSE, testList, &ulCount) == CKR_OK); + CPPUNIT_ASSERT(ulCount == 2); + ulCount = 10; + CPPUNIT_ASSERT(slotManager.getSlotList(&store, CK_TRUE, testList, &ulCount) == CKR_OK); + CPPUNIT_ASSERT(ulCount == 2); + ulCount = 10; + CPPUNIT_ASSERT(slotManager.getSlotList(&store, CK_FALSE, NULL_PTR, &ulCount) == CKR_OK); + CPPUNIT_ASSERT(ulCount == 3); + ulCount = 10; + CPPUNIT_ASSERT(slotManager.getSlotList(&store, CK_TRUE, NULL_PTR, &ulCount) == CKR_OK); + CPPUNIT_ASSERT(ulCount == 3); + + // get new list + CPPUNIT_ASSERT(slotManager.getSlotList(&store, CK_TRUE, testList, &ulCount) == CKR_OK); + CPPUNIT_ASSERT(ulCount == 3); + + // Retrieve token information about the tokens + CPPUNIT_ASSERT(slotManager.getSlots()[testList[0]]->getToken() != NULL); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[0]]->getToken()->getTokenInfo(&tokenInfo) == CKR_OK); + CPPUNIT_ASSERT((tokenInfo.flags & CKF_TOKEN_INITIALIZED) == CKF_TOKEN_INITIALIZED); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[1]]->getToken() != NULL); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[1]]->getToken()->getTokenInfo(&tokenInfo) == CKR_OK); + CPPUNIT_ASSERT((tokenInfo.flags & CKF_TOKEN_INITIALIZED) == CKF_TOKEN_INITIALIZED); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[2]]->getToken() != NULL); + CPPUNIT_ASSERT(slotManager.getSlots()[testList[2]]->getToken()->getTokenInfo(&tokenInfo) == CKR_OK); + CPPUNIT_ASSERT((tokenInfo.flags & CKF_TOKEN_INITIALIZED) != CKF_TOKEN_INITIALIZED); +} + |