blob: ae4e505c49e7d730252948492d896b7a35f953cd [file] [log] [blame]
// Copyright 2016 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include <gmock/gmock.h>
#include <gtest/gtest.h>
#include "authpolicy/samba_interface.h"
#include "authpolicy/samba_interface_internal.h"
namespace ai = authpolicy::internal;
namespace authpolicy {
class SambaInterfaceTest : public ::testing::Test {
public:
SambaInterfaceTest() {}
~SambaInterfaceTest() override {}
protected:
// Helpers for ParseUserPrincipleName.
std::string user_name_;
std::string realm_;
std::string normalized_upn_;
ErrorType error_ = ERROR_NONE;
bool ParseUserPrincipalName(const char* user_principal_name_) {
return ai::ParseUserPrincipalName(user_principal_name_, &user_name_,
&realm_, &normalized_upn_, &error_);
}
// Helpers for FindToken.
std::string find_token_result_;
bool FindToken(const char* in_str, char token_separator, const char* token) {
return ai::FindToken(in_str, token_separator, token, &find_token_result_);
}
// Helpers for ParseGpoVersion
unsigned int gpo_version_ = 0;
private:
DISALLOW_COPY_AND_ASSIGN(SambaInterfaceTest);
};
// a@b.c succeeds.
TEST_F(SambaInterfaceTest, ParseUPNSuccess) {
EXPECT_TRUE(ParseUserPrincipalName("usar@wokgroup.doomain"));
EXPECT_EQ(user_name_, "usar");
EXPECT_EQ(realm_, "WOKGROUP.DOOMAIN");
EXPECT_EQ(normalized_upn_, "usar@WOKGROUP.DOOMAIN");
EXPECT_EQ(error_, ERROR_NONE);
}
// a@b.c.d.e succeeds.
TEST_F(SambaInterfaceTest, ParseUPNSuccess_Long) {
EXPECT_TRUE(ParseUserPrincipalName("usar@wokgroup.doomain.company.com"));
EXPECT_EQ(user_name_, "usar");
EXPECT_EQ(realm_, "WOKGROUP.DOOMAIN.COMPANY.COM");
EXPECT_EQ(normalized_upn_, "usar@WOKGROUP.DOOMAIN.COMPANY.COM");
}
// Capitalization works as expected.
TEST_F(SambaInterfaceTest, ParseUPNSuccess_MixedCaps) {
EXPECT_TRUE(ParseUserPrincipalName("UsAr@WoKgrOUP.DOOMain.com"));
EXPECT_EQ(user_name_, "UsAr");
EXPECT_EQ(realm_, "WOKGROUP.DOOMAIN.COM");
EXPECT_EQ(normalized_upn_, "UsAr@WOKGROUP.DOOMAIN.COM");
}
// a.b@c.d succeeds, even though it is invalid (rejected by kinit).
TEST_F(SambaInterfaceTest, ParseUPNSuccess_DotAtDot) {
EXPECT_TRUE(ParseUserPrincipalName("usar.team@wokgroup.doomain"));
EXPECT_EQ(user_name_, "usar.team");
EXPECT_EQ(realm_, "WOKGROUP.DOOMAIN");
EXPECT_EQ(normalized_upn_, "usar.team@WOKGROUP.DOOMAIN");
}
// a@ fails (no workgroup.domain).
TEST_F(SambaInterfaceTest, ParseUPNFail_NoRealm) {
EXPECT_FALSE(ParseUserPrincipalName("usar@"));
EXPECT_EQ(error_, ERROR_PARSE_UPN_FAILED);
}
// a fails (no @workgroup.domain).
TEST_F(SambaInterfaceTest, ParseUPNFail_NoAtRealm) {
EXPECT_FALSE(ParseUserPrincipalName("usar"));
EXPECT_EQ(error_, ERROR_PARSE_UPN_FAILED);
}
// a. fails (no @workgroup.domain and trailing . is invalid, anyway).
TEST_F(SambaInterfaceTest, ParseUPNFail_NoAtRealmButDot) {
EXPECT_FALSE(ParseUserPrincipalName("usar."));
EXPECT_EQ(error_, ERROR_PARSE_UPN_FAILED);
}
// a@b@c fails (double at).
TEST_F(SambaInterfaceTest, ParseUPNFail_AtAt) {
EXPECT_FALSE(ParseUserPrincipalName("usar@wokgroup@doomain"));
EXPECT_EQ(error_, ERROR_PARSE_UPN_FAILED);
}
// a@b@c fails (double at).
TEST_F(SambaInterfaceTest, ParseUPNFail_AtAtDot) {
EXPECT_FALSE(ParseUserPrincipalName("usar@wokgroup@doomain.com"));
EXPECT_EQ(error_, ERROR_PARSE_UPN_FAILED);
}
// @b.c fails (empty user name).
TEST_F(SambaInterfaceTest, ParseUPNFail_NoUpn) {
EXPECT_FALSE(ParseUserPrincipalName("@wokgroup.doomain"));
EXPECT_EQ(error_, ERROR_PARSE_UPN_FAILED);
}
// b.c fails (no user name@).
TEST_F(SambaInterfaceTest, ParseUPNFail_NoUpnAt) {
EXPECT_FALSE(ParseUserPrincipalName("wokgroup.doomain"));
EXPECT_EQ(error_, ERROR_PARSE_UPN_FAILED);
}
// .b.c fails (no user name@ and initial . is invalid, anyway).
TEST_F(SambaInterfaceTest, ParseUPNFail_NoUpnAtButDot) {
EXPECT_FALSE(ParseUserPrincipalName(".wokgroup.doomain"));
EXPECT_EQ(error_, ERROR_PARSE_UPN_FAILED);
}
// a=b works.
TEST_F(SambaInterfaceTest, FindTokenSuccess) {
EXPECT_TRUE(FindToken("tok=res", '=', "tok"));
EXPECT_EQ(find_token_result_, "res");
}
// Multiple matches return the first match
TEST_F(SambaInterfaceTest, FindTokenSuccess_Multiple) {
EXPECT_TRUE(FindToken("tok=res\ntok=res2", '=', "tok"));
EXPECT_EQ(find_token_result_, "res");
}
// Different separators are ignored matches return the first match
TEST_F(SambaInterfaceTest, FindTokenSuccess_IgnoreInvalidSeparator) {
EXPECT_TRUE(FindToken("tok:res\ntok=res2", '=', "tok"));
EXPECT_EQ(find_token_result_, "res2");
}
// a=b=c returns b=c
TEST_F(SambaInterfaceTest, FindTokenSuccess_TwoSeparators) {
EXPECT_TRUE(FindToken("tok = res = true", '=', "tok"));
EXPECT_EQ(find_token_result_, "res = true");
}
// Trims leading and trailing whitespace
TEST_F(SambaInterfaceTest, FindTokenSuccess_TrimWhitespace) {
EXPECT_TRUE(FindToken("\n \n\n tok = res \n\n", '=', "tok"));
EXPECT_EQ(find_token_result_, "res");
}
// Empty input strings fail.
TEST_F(SambaInterfaceTest, FindTokenFail_Empty) {
EXPECT_FALSE(FindToken("", '=', "tok"));
EXPECT_FALSE(FindToken("\n", '=', "tok"));
EXPECT_FALSE(FindToken("\n\n\n", '=', "tok"));
}
// Whitespace input strings fail.
TEST_F(SambaInterfaceTest, FindTokenFail_Whitespace) {
EXPECT_FALSE(FindToken(" ", '=', "tok"));
EXPECT_FALSE(FindToken(" \n \n ", '=', "tok"));
EXPECT_FALSE(FindToken(" \n\n \n ", '=', "tok"));
}
// Parsing valid GPO version strings.
TEST_F(SambaInterfaceTest, ParseGpoVersionSuccess) {
EXPECT_TRUE(ai::ParseGpoVersion("0 (0x0000)", &gpo_version_));
EXPECT_EQ(gpo_version_, 0);
EXPECT_TRUE(ai::ParseGpoVersion("1 (0x0001)", &gpo_version_));
EXPECT_EQ(gpo_version_, 1);
EXPECT_TRUE(ai::ParseGpoVersion("9 (0x0009)", &gpo_version_));
EXPECT_EQ(gpo_version_, 9);
EXPECT_TRUE(ai::ParseGpoVersion("15 (0x000f)", &gpo_version_));
EXPECT_EQ(gpo_version_, 15);
EXPECT_TRUE(ai::ParseGpoVersion("65535 (0xffff)", &gpo_version_));
EXPECT_EQ(gpo_version_, 0xffff);
}
// Empty string
TEST_F(SambaInterfaceTest, ParseGpoVersionFail_EmptyString) {
EXPECT_FALSE(ai::ParseGpoVersion("", &gpo_version_));
}
// Base-10 and Base-16 (hex) numbers not matching
TEST_F(SambaInterfaceTest, ParseGpoVersionFail_NotMatching) {
EXPECT_FALSE(ai::ParseGpoVersion("15 (0x000e)", &gpo_version_));
}
// Non-numeric characters fail
TEST_F(SambaInterfaceTest, ParseGpoVersionFail_NonNumericCharacters) {
EXPECT_FALSE(ai::ParseGpoVersion("15a (0x00f)", &gpo_version_));
EXPECT_FALSE(ai::ParseGpoVersion("15 (0xg0f)", &gpo_version_));
EXPECT_FALSE(ai::ParseGpoVersion("dead", &gpo_version_));
}
// Missing 0x in hex string fails
TEST_F(SambaInterfaceTest, ParseGpoVersionFail_Missing0x) {
EXPECT_FALSE(ai::ParseGpoVersion("15 (000f)", &gpo_version_));
}
// Missing brackets in hex string fail
TEST_F(SambaInterfaceTest, ParseGpoVersionFail_MissingBrackets) {
EXPECT_FALSE(ai::ParseGpoVersion("15 000f", &gpo_version_));
}
// Missing hex string fails
TEST_F(SambaInterfaceTest, ParseGpoVersionFail_MissingHex) {
EXPECT_FALSE(ai::ParseGpoVersion("10", &gpo_version_));
}
// Only hex string fails
TEST_F(SambaInterfaceTest, ParseGpoVersionFail_HexOnly) {
EXPECT_FALSE(ai::ParseGpoVersion("0x000f", &gpo_version_));
}
// Only hex string in brackets fails
TEST_F(SambaInterfaceTest, ParseGpoVersionFail_BracketsHexOnly) {
EXPECT_FALSE(ai::ParseGpoVersion("(0x000f)", &gpo_version_));
}
} // namespace authpolicy