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

This commit is contained in:
Thomas Faber 2013-12-19 00:20:27 +01:00 committed by Alexandre Julliard
parent 0868486d17
commit 27c8e9013f
1 changed files with 57 additions and 63 deletions

View File

@ -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 );
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;
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 );
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)