Juan Lang : crypt32: Add tests of committing a collection store.
Alexandre Julliard
julliard at winehq.org
Wed Nov 4 10:26:26 CST 2009
Module: wine
Branch: master
Commit: e6047ae52d6f78a7983e9738c9c68603ccfa42a7
URL: http://source.winehq.org/git/wine.git/?a=commit;h=e6047ae52d6f78a7983e9738c9c68603ccfa42a7
Author: Juan Lang <juan.lang at gmail.com>
Date: Tue Nov 3 10:58:19 2009 -0800
crypt32: Add tests of committing a collection store.
---
dlls/crypt32/tests/store.c | 138 ++++++++++++++++++++++++++++++++------------
1 files changed, 101 insertions(+), 37 deletions(-)
diff --git a/dlls/crypt32/tests/store.c b/dlls/crypt32/tests/store.c
index 5c019fa..ff39d71 100644
--- a/dlls/crypt32/tests/store.c
+++ b/dlls/crypt32/tests/store.c
@@ -277,11 +277,53 @@ static void testMemStore(void)
CertCloseStore(store1, 0);
}
+static void compareFile(LPCWSTR filename, const BYTE *pb, DWORD cb)
+{
+ HANDLE h;
+ BYTE buf[200];
+ BOOL ret;
+ DWORD cbRead = 0, totalRead = 0;
+
+ h = CreateFileW(filename, GENERIC_READ, 0, NULL, OPEN_EXISTING,
+ FILE_ATTRIBUTE_NORMAL, NULL);
+ if (h == INVALID_HANDLE_VALUE)
+ return;
+ do {
+ ret = ReadFile(h, buf, sizeof(buf), &cbRead, NULL);
+ if (ret && cbRead)
+ {
+ ok(totalRead + cbRead <= cb, "Expected total count %d, see %d\n",
+ cb, totalRead + cbRead);
+ ok(!memcmp(pb + totalRead, buf, cbRead),
+ "Unexpected data in file\n");
+ totalRead += cbRead;
+ }
+ } while (ret && cbRead);
+ CloseHandle(h);
+}
+
+static const BYTE serializedStoreWithCert[] = {
+ 0x00,0x00,0x00,0x00,0x43,0x45,0x52,0x54,0x20,0x00,0x00,0x00,0x01,0x00,0x00,
+ 0x00,0x7c,0x00,0x00,0x00,0x30,0x7a,0x02,0x01,0x01,0x30,0x02,0x06,0x00,0x30,
+ 0x15,0x31,0x13,0x30,0x11,0x06,0x03,0x55,0x04,0x03,0x13,0x0a,0x4a,0x75,0x61,
+ 0x6e,0x20,0x4c,0x61,0x6e,0x67,0x00,0x30,0x22,0x18,0x0f,0x31,0x36,0x30,0x31,
+ 0x30,0x31,0x30,0x31,0x30,0x30,0x30,0x30,0x30,0x30,0x5a,0x18,0x0f,0x31,0x36,
+ 0x30,0x31,0x30,0x31,0x30,0x31,0x30,0x30,0x30,0x30,0x30,0x30,0x5a,0x30,0x15,
+ 0x31,0x13,0x30,0x11,0x06,0x03,0x55,0x04,0x03,0x13,0x0a,0x4a,0x75,0x61,0x6e,
+ 0x20,0x4c,0x61,0x6e,0x67,0x00,0x30,0x07,0x30,0x02,0x06,0x00,0x03,0x01,0x00,
+ 0xa3,0x16,0x30,0x14,0x30,0x12,0x06,0x03,0x55,0x1d,0x13,0x01,0x01,0xff,0x04,
+ 0x08,0x30,0x06,0x01,0x01,0xff,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
+ 0x00,0x00,0x00,0x00,0x00,0x00 };
+
static void testCollectionStore(void)
{
HCERTSTORE store1, store2, collection, collection2;
PCCERT_CONTEXT context;
BOOL ret;
+ static const WCHAR szPrefix[] = { 'c','e','r',0 };
+ static const WCHAR szDot[] = { '.',0 };
+ WCHAR filename[MAX_PATH];
+ HANDLE file;
if (!pCertAddStoreToCollection)
{
@@ -595,6 +637,65 @@ static void testCollectionStore(void)
CertCloseStore(collection, 0);
CertCloseStore(store1, 0);
+
+ /* Test whether a collection store can be committed */
+ if (!pCertControlStore)
+ {
+ win_skip("CertControlStore() is not available\n");
+ return;
+ }
+ collection = CertOpenStore(CERT_STORE_PROV_COLLECTION, 0, 0,
+ CERT_STORE_CREATE_NEW_FLAG, NULL);
+
+ SetLastError(0xdeadbeef);
+ ret = pCertControlStore(collection, 0, CERT_STORE_CTRL_COMMIT, NULL);
+ ok(ret, "CertControlStore failed: %08x\n", GetLastError());
+
+ /* Adding a mem store that can't be committed prevents a successful commit.
+ */
+ store1 = CertOpenStore(CERT_STORE_PROV_MEMORY, 0, 0,
+ CERT_STORE_CREATE_NEW_FLAG, NULL);
+ pCertAddStoreToCollection(collection, store1, 0, 0);
+ SetLastError(0xdeadbeef);
+ ret = pCertControlStore(collection, 0, CERT_STORE_CTRL_COMMIT, NULL);
+ todo_wine
+ ok(!ret && GetLastError() == ERROR_CALL_NOT_IMPLEMENTED,
+ "expected ERROR_CALL_NOT_IMPLEMENTED, got %d\n", GetLastError());
+ pCertRemoveStoreFromCollection(collection, store1);
+ CertCloseStore(store1, 0);
+
+ /* Test adding a cert to a collection with a file store, committing the
+ * change to the collection, and comparing the resulting file.
+ */
+ if (!GetTempFileNameW(szDot, szPrefix, 0, filename))
+ return;
+
+ DeleteFileW(filename);
+ file = CreateFileW(filename, GENERIC_READ | GENERIC_WRITE, 0, NULL,
+ CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
+ if (file == INVALID_HANDLE_VALUE)
+ return;
+
+ store1 = CertOpenStore(CERT_STORE_PROV_FILE, 0, 0,
+ CERT_FILE_STORE_COMMIT_ENABLE_FLAG, file);
+ ok(store1 != NULL, "CertOpenStore failed: %08x\n", GetLastError());
+ CloseHandle(file);
+ pCertAddStoreToCollection(collection, store1,
+ CERT_PHYSICAL_STORE_ADD_ENABLE_FLAG, 0);
+ CertCloseStore(store1, 0);
+
+ ret = CertAddEncodedCertificateToStore(collection, X509_ASN_ENCODING,
+ bigCert, sizeof(bigCert), CERT_STORE_ADD_ALWAYS, NULL);
+ ok(ret, "CertAddEncodedCertificateToStore failed: %08x\n",
+ GetLastError());
+ ret = pCertControlStore(collection, 0, CERT_STORE_CTRL_COMMIT, NULL);
+ ok(ret, "CertControlStore failed: %d\n", ret);
+
+ CertCloseStore(collection, 0);
+
+ compareFile(filename, serializedStoreWithCert,
+ sizeof(serializedStoreWithCert));
+ DeleteFileW(filename);
}
/* Looks for the property with ID propID in the buffer buf. Returns a pointer
@@ -1068,18 +1169,6 @@ static void testSystemStore(void)
RegDeleteKeyW(HKEY_CURRENT_USER, BogusPathW);
}
-static const BYTE serializedStoreWithCert[] = {
- 0x00,0x00,0x00,0x00,0x43,0x45,0x52,0x54,0x20,0x00,0x00,0x00,0x01,0x00,0x00,
- 0x00,0x7c,0x00,0x00,0x00,0x30,0x7a,0x02,0x01,0x01,0x30,0x02,0x06,0x00,0x30,
- 0x15,0x31,0x13,0x30,0x11,0x06,0x03,0x55,0x04,0x03,0x13,0x0a,0x4a,0x75,0x61,
- 0x6e,0x20,0x4c,0x61,0x6e,0x67,0x00,0x30,0x22,0x18,0x0f,0x31,0x36,0x30,0x31,
- 0x30,0x31,0x30,0x31,0x30,0x30,0x30,0x30,0x30,0x30,0x5a,0x18,0x0f,0x31,0x36,
- 0x30,0x31,0x30,0x31,0x30,0x31,0x30,0x30,0x30,0x30,0x30,0x30,0x5a,0x30,0x15,
- 0x31,0x13,0x30,0x11,0x06,0x03,0x55,0x04,0x03,0x13,0x0a,0x4a,0x75,0x61,0x6e,
- 0x20,0x4c,0x61,0x6e,0x67,0x00,0x30,0x07,0x30,0x02,0x06,0x00,0x03,0x01,0x00,
- 0xa3,0x16,0x30,0x14,0x30,0x12,0x06,0x03,0x55,0x1d,0x13,0x01,0x01,0xff,0x04,
- 0x08,0x30,0x06,0x01,0x01,0xff,0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00,0x00,
- 0x00,0x00,0x00,0x00,0x00,0x00 };
static const BYTE serializedStoreWithCertAndCRL[] = {
0x00,0x00,0x00,0x00,0x43,0x45,0x52,0x54,0x20,0x00,0x00,0x00,0x01,0x00,0x00,
0x00,0x7c,0x00,0x00,0x00,0x30,0x7a,0x02,0x01,0x01,0x30,0x02,0x06,0x00,0x30,
@@ -1098,31 +1187,6 @@ static const BYTE serializedStoreWithCertAndCRL[] = {
0x00,0x0f,0x0e,0x0d,0x0c,0x0b,0x0a,0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x02,
0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 };
-static void compareFile(LPCWSTR filename, const BYTE *pb, DWORD cb)
-{
- HANDLE h;
- BYTE buf[200];
- BOOL ret;
- DWORD cbRead = 0, totalRead = 0;
-
- h = CreateFileW(filename, GENERIC_READ, 0, NULL, OPEN_EXISTING,
- FILE_ATTRIBUTE_NORMAL, NULL);
- if (h == INVALID_HANDLE_VALUE)
- return;
- do {
- ret = ReadFile(h, buf, sizeof(buf), &cbRead, NULL);
- if (ret && cbRead)
- {
- ok(totalRead + cbRead <= cb, "Expected total count %d, see %d\n",
- cb, totalRead + cbRead);
- ok(!memcmp(pb + totalRead, buf, cbRead),
- "Unexpected data in file\n");
- totalRead += cbRead;
- }
- } while (ret && cbRead);
- CloseHandle(h);
-}
-
static void testFileStore(void)
{
static const WCHAR szPrefix[] = { 'c','e','r',0 };
More information about the wine-cvs
mailing list