Thomas Faber : advapi32/tests: Use a loop for CredUnmarshalCredential test cases.

Alexandre Julliard julliard at winehq.org
Mon Mar 31 13:32:43 CDT 2014


Module: wine
Branch: master
Commit: 27c8e9013f3148d34401de66c90d64a5dcdf8a11
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=27c8e9013f3148d34401de66c90d64a5dcdf8a11

Author: Thomas Faber <thomas.faber at reactos.org>
Date:   Thu Dec 19 00:20:27 2013 +0100

advapi32/tests: Use a loop for CredUnmarshalCredential test cases.

---

 dlls/advapi32/tests/cred.c |  120 +++++++++++++++++++++-----------------------
 1 file changed, 57 insertions(+), 63 deletions(-)

diff --git a/dlls/advapi32/tests/cred.c b/dlls/advapi32/tests/cred.c
index 59d4bbb..e65a605 100644
--- a/dlls/advapi32/tests/cred.c
+++ b/dlls/advapi32/tests/cred.c
@@ -563,14 +563,31 @@ static void test_CredMarshalCredentialA(void)
 
 static void test_CredUnmarshalCredentialA(void)
 {
+    static const UCHAR cert_empty[CERT_HASH_LENGTH] = {0};
+    static const UCHAR cert_wine[CERT_HASH_LENGTH] = {'W','i','n','e',0};
     static const WCHAR tW[] = {'t',0};
     static const WCHAR testW[] = {'t','e','s','t',0};
+    void *p;
     CERT_CREDENTIAL_INFO *cert;
+    const UCHAR *hash;
     USERNAME_TARGET_CREDENTIAL_INFO *username;
     CRED_MARSHAL_TYPE type;
-    unsigned int i;
+    unsigned int i, j;
     DWORD error;
     BOOL ret;
+    const struct {
+        const char *cred;
+        CRED_MARSHAL_TYPE type;
+        const void *unmarshaled;
+    } tests[] = {
+        { "@@BAAAAAAAAAAAAAAAAAAAAAAAAAAA", CertCredential, cert_empty },
+        { "@@BXlmblBAAAAAAAAAAAAAAAAAAAAA", CertCredential, cert_wine },
+        { "@@CAAAAAA", UsernameTargetCredential, NULL },
+        { "@@CAAAAAA0BA", UsernameTargetCredential, NULL },
+        { "@@CCAAAAA0BA", UsernameTargetCredential, tW },
+        { "@@CIAAAAA0BQZAMHA0BA", UsernameTargetCredential, testW },
+        { "@@CA-----0BQZAMHA0BA", UsernameTargetCredential, NULL },
+    };
 
     SetLastError( 0xdeadbeef );
     ret = pCredUnmarshalCredentialA( NULL, NULL, NULL );
@@ -615,69 +632,46 @@ static void test_CredUnmarshalCredentialA(void)
     ok( error == ERROR_INVALID_PARAMETER, "got %u\n", error );
     }
 
-    type = 0;
-    cert = NULL;
-    ret = pCredUnmarshalCredentialA( "@@BAAAAAAAAAAAAAAAAAAAAAAAAAAA", &type, (void **)&cert );
-    ok( ret, "unexpected failure %u\n", GetLastError() );
-    ok( type == CertCredential, "got %u\n", type );
-    ok( cert != NULL, "cert is NULL\n" );
-    ok( cert->cbSize == sizeof(*cert), "wrong size %u\n", cert->cbSize );
-    for (i = 0; i < sizeof(cert->rgbHashOfCert); i++) ok( !cert->rgbHashOfCert[i], "wrong data\n" );
-    pCredFree( cert );
-
-    type = 0;
-    cert = NULL;
-    ret = pCredUnmarshalCredentialA( "@@BXlmblBAAAAAAAAAAAAAAAAAAAAA", &type, (void **)&cert );
-    ok( ret, "unexpected failure %u\n", GetLastError() );
-    ok( type == CertCredential, "got %u\n", type );
-    ok( cert != NULL, "cert is NULL\n" );
-    ok( cert->cbSize == sizeof(*cert), "wrong size %u\n", cert->cbSize );
-    ok( cert->rgbHashOfCert[0] == 'W', "wrong data)\n" );
-    ok( cert->rgbHashOfCert[1] == 'i', "wrong data\n" );
-    ok( cert->rgbHashOfCert[2] == 'n', "wrong data\n" );
-    ok( cert->rgbHashOfCert[3] == 'e', "wrong data\n" );
-    for (i = 4; i < sizeof(cert->rgbHashOfCert); i++) ok( !cert->rgbHashOfCert[i], "wrong data\n" );
-    pCredFree( cert );
-
-    SetLastError( 0xdeadbeef );
-    ret = pCredUnmarshalCredentialA( "@@CAAAAAA", &type, (void **)&username );
-    error = GetLastError();
-    ok( !ret, "unexpected success\n" );
-    ok( error == ERROR_INVALID_PARAMETER, "got %u\n", error );
-
-    SetLastError( 0xdeadbeef );
-    ret = pCredUnmarshalCredentialA( "@@CAAAAAA0BA", &type, (void **)&username );
-    error = GetLastError();
-    ok( !ret, "unexpected success\n" );
-    ok( error == ERROR_INVALID_PARAMETER, "got %u\n", error );
-
-    type = 0;
-    username = NULL;
-    ret = pCredUnmarshalCredentialA( "@@CCAAAAA0BA", &type, (void **)&username );
-    ok( ret, "unexpected failure %u\n", GetLastError() );
-    ok( type == UsernameTargetCredential, "got %u\n", type );
-    ok( username != NULL, "username is NULL\n" );
-    ok( username->UserName != NULL, "UserName is NULL\n" );
-    ok( !lstrcmpW( username->UserName, tW ), "got %s\n", wine_dbgstr_w(username->UserName) );
-    pCredFree( username );
-
-    type = 0;
-    username = NULL;
-    ret = pCredUnmarshalCredentialA( "@@CIAAAAA0BQZAMHA0BA", &type, (void **)&username );
-    ok( ret, "unexpected failure %u\n", GetLastError() );
-    ok( type == UsernameTargetCredential, "got %u\n", type );
-    ok( username != NULL, "username is NULL\n" );
-    ok( username->UserName != NULL, "UserName is NULL\n" );
-    ok( !lstrcmpW( username->UserName, testW ), "got %s\n", wine_dbgstr_w(username->UserName) );
-    pCredFree( username );
+    for (i = 0; i < sizeof(tests) / sizeof(tests[0]); i++)
+    {
+        SetLastError(0xdeadbeef);
+        type = 0;
+        p = NULL;
+        ret = pCredUnmarshalCredentialA(tests[i].cred, &type, &p);
+        error = GetLastError();
+        if (tests[i].unmarshaled)
+        {
+            ok(ret, "[%u] unexpected failure %u\n", i, error);
+            ok(type == tests[i].type, "[%u] got %u\n", i, type);
+            ok(p != NULL, "[%u] returned pointer is NULL\n", i);
+            if (tests[i].type == CertCredential)
+            {
+                cert = p;
+                hash = tests[i].unmarshaled;
+                ok(cert->cbSize == sizeof(*cert),
+                   "[%u] wrong size %u\n", i, cert->cbSize);
+                for (j = 0; j < sizeof(cert->rgbHashOfCert); j++)
+                    ok(cert->rgbHashOfCert[j] == hash[j], "[%u] wrong data\n", i);
+            }
+            else if (tests[i].type == UsernameTargetCredential)
+            {
+                username = p;
+                ok(username->UserName != NULL, "[%u] UserName is NULL\n", i);
+                ok(!lstrcmpW(username->UserName, tests[i].unmarshaled),
+                   "[%u] got %s\n", i, wine_dbgstr_w(username->UserName));
+            }
+        }
+        else
+        {
+            ok(!ret, "[%u] unexpected success\n", i);
+            ok(error == ERROR_INVALID_PARAMETER, "[%u] got %u\n", i, error);
+            todo_wine ok(type == tests[i].type, "[%u] got %u\n", i, type);
+            ok(p == NULL, "[%u] returned pointer is not NULL\n", i);
+        }
 
-    type = 0;
-    username = NULL;
-    SetLastError( 0xdeadbeef );
-    ret = pCredUnmarshalCredentialA( "@@CA-----0BQZAMHA0BA", &type, (void **)&username );
-    error = GetLastError();
-    ok( !ret, "unexpected success\n" );
-    ok( error == ERROR_INVALID_PARAMETER, "got %u\n", error );
+        if (ret)
+            pCredFree(p);
+    }
 }
 
 static void test_CredIsMarshaledCredentialA(void)




More information about the wine-cvs mailing list