Exemple #1
0
TEST(Settings, Errors)
{
	Settings test;

	EXPECT_FALSE(test.Open("non-existent"));
	ASSERT_TRUE(test.Open("test/config.toml.test"));

	EXPECT_TRUE(test.GetRawString("NonExistent").empty());
	EXPECT_TRUE(test.GetStringSet("NonExistent").empty());

	auto isEmpty = test.GetArray<std::list, std::string>("NonExistent").empty();
	EXPECT_TRUE(isEmpty);
}
Exemple #2
0
TEST(Settings, Read)
{
	Settings test;
	ASSERT_TRUE(test.Open("test/config.toml.test"));

	EXPECT_EQ("jid_value", test.GetUserJID());
	EXPECT_EQ("password_value", test.GetPassword());
	EXPECT_EQ("muc_value", test.GetMUC());

	EXPECT_EQ("StringValue", test.GetRawString("TestGroup.StringName"));
	auto stringSet = test.GetStringSet("TestGroup.StringSetName");

	EXPECT_EQ(2, stringSet.size());
	EXPECT_EQ("StringValue1", *stringSet.begin());
	EXPECT_EQ("StringValue2", *stringSet.rbegin());

	auto set = test.GetArray<std::vector, std::int64_t>("TestGroup.NumArray");
	EXPECT_EQ(3, set.size());
	EXPECT_EQ(4, set.at(0));
	EXPECT_EQ(5, set.at(1));
	EXPECT_EQ(6, set.at(2));
}
bool FilterList::SaveToFile(LPCTSTR pFileName) const
{
	Settings Setting;

	if (!Setting.Open(pFileName, TEXT("Filters"), Settings::OPEN_WRITE))
		return false;

	Setting.Clear();

	for (int i = 0; i < (int)m_FilterList.size(); i++) {
		const FilterInfo &Filter = m_FilterList[i];
		TCHAR szKeyName[64];
		int KeyPrefixLength = FormatString(szKeyName, cvLengthOf(szKeyName), TEXT("Filter%d."), i);
		LPTSTR pszKeyProp = szKeyName + KeyPrefixLength;
		int MaxKeyProp = cvLengthOf(szKeyName) - KeyPrefixLength;
		TCHAR szBuffer[64];

		CopyString(pszKeyProp, MaxKeyProp, TEXT("Type"));
		Setting.Write(szKeyName, (int)Filter.Type);

		CopyString(pszKeyProp, MaxKeyProp, TEXT("Match"));
		Setting.Write(szKeyName, (int)Filter.Match);

		if (Filter.Match == FilterInfo::MATCH_EQUAL) {
			FormatIPAddress(Filter.Address, szBuffer, cvLengthOf(szBuffer));
			CopyString(pszKeyProp, MaxKeyProp, TEXT("Address"));
			Setting.Write(szKeyName, szBuffer);
		} else if (Filter.Match == FilterInfo::MATCH_RANGE) {
			FormatIPAddress(Filter.AddressRange.Low, szBuffer, cvLengthOf(szBuffer));
			CopyString(pszKeyProp, MaxKeyProp, TEXT("AddressLow"));
			Setting.Write(szKeyName, szBuffer);
			FormatIPAddress(Filter.AddressRange.High, szBuffer, cvLengthOf(szBuffer));
			CopyString(pszKeyProp, MaxKeyProp, TEXT("AddressHigh"));
			Setting.Write(szKeyName, szBuffer);
		} else {
			cvDebugTrace(TEXT("Invalid filter match type %d\n"), Filter.Match);
		}

		if (Filter.HostName[0] != _T('\0')) {
			CopyString(pszKeyProp, MaxKeyProp, TEXT("HostName"));
			Setting.Write(szKeyName, Filter.HostName);
		}

		CopyString(pszKeyProp, MaxKeyProp, TEXT("Enable"));
		Setting.Write(szKeyName, Filter.Enable);

		SYSTEMTIME st;
		::FileTimeToSystemTime(&Filter.AddedTime, &st);
		FormatString(szBuffer, cvLengthOf(szBuffer),
					 TEXT("%d%02d%02d%02d%02d%02d%03d"),
					 st.wYear, st.wMonth, st.wDay,
					 st.wHour, st.wMinute, st.wSecond, st.wMilliseconds);
		CopyString(pszKeyProp, MaxKeyProp, TEXT("AddedTime"));
		Setting.Write(szKeyName, szBuffer);

		if (Filter.Comment[0] != _T('\0')) {
			CopyString(pszKeyProp, MaxKeyProp, TEXT("Comment"));
			Setting.Write(szKeyName, Filter.Comment);
		}
	}

	Setting.Close();

	return true;
}
bool FilterList::LoadFromFile(LPCTSTR pFileName)
{
	Clear();

	Settings Setting;

	if (!Setting.Open(pFileName, TEXT("Filters"), Settings::OPEN_READ))
		return false;

	for (int i = 0;; i++) {
		TCHAR szKeyName[64];
		int KeyPrefixLength = FormatString(szKeyName, cvLengthOf(szKeyName), TEXT("Filter%d."), i);
		LPTSTR pszKeyProp = szKeyName + KeyPrefixLength;
		int MaxKeyProp = cvLengthOf(szKeyName) - KeyPrefixLength;
		FilterInfo Filter;
		int Type, Match;
		TCHAR szBuffer[64];

		CopyString(pszKeyProp, MaxKeyProp, TEXT("Type"));
		if (!Setting.Read(szKeyName, &Type))
			break;
		if (Type < 0 || Type >= FilterInfo::TYPE_TRAILER)
			continue;
		Filter.Type = (FilterInfo::FilterType)Type;

		CopyString(pszKeyProp, MaxKeyProp, TEXT("Match"));
		if (!Setting.Read(szKeyName, &Match)
				|| Match < 0 || Match >= FilterInfo::MATCH_TRAILER)
			continue;
		Filter.Match = (FilterInfo::MatchType)Match;

		if (Filter.Match == FilterInfo::MATCH_EQUAL) {
			CopyString(pszKeyProp, MaxKeyProp, TEXT("Address"));
			if (!Setting.Read(szKeyName, szBuffer, cvLengthOf(szBuffer))
					|| !Filter.Address.Parse(szBuffer))
				continue;
		} else if (Filter.Match == FilterInfo::MATCH_RANGE) {
			CopyString(pszKeyProp, MaxKeyProp, TEXT("AddressLow"));
			if (!Setting.Read(szKeyName, szBuffer, cvLengthOf(szBuffer))
					|| !Filter.AddressRange.Low.Parse(szBuffer))
				continue;
			CopyString(pszKeyProp, MaxKeyProp, TEXT("AddressHigh"));
			if (!Setting.Read(szKeyName, szBuffer, cvLengthOf(szBuffer))
					|| !Filter.AddressRange.High.Parse(szBuffer))
				continue;
		} else {
			cvDebugTrace(TEXT("Invalid filter match type %d\n"), Filter.Match);
			continue;
		}

		Filter.HostName[0] = _T('\0');
		CopyString(pszKeyProp, MaxKeyProp, TEXT("HostName"));
		Setting.Read(szKeyName, Filter.HostName, cvLengthOf(Filter.HostName));

		Filter.Enable = true;
		CopyString(pszKeyProp, MaxKeyProp, TEXT("Enable"));
		Setting.Read(szKeyName, &Filter.Enable);

		::GetSystemTimeAsFileTime(&Filter.AddedTime);
		CopyString(pszKeyProp, MaxKeyProp, TEXT("AddedTime"));
		if (Setting.Read(szKeyName, szBuffer, cvLengthOf(szBuffer))) {
			ULONGLONG Time = StrToUInt64(szBuffer);
			SYSTEMTIME st;
			FILETIME ft;

			st.wYear  = (WORD)(Time / 10000000000000);
			st.wMonth = (WORD)((Time / 100000000000) % 100);
			st.wDay   = (WORD)((Time / 1000000000) % 100);
			st.wHour  = (WORD)((Time / 10000000) % 100);
			st.wMinute = (WORD)((Time / 100000) % 100);
			st.wSecond = (WORD)((Time / 1000) % 100);
			st.wMilliseconds = (WORD)(Time % 1000);
			if (::SystemTimeToFileTime(&st, &ft))
				Filter.AddedTime = ft;
		}

		Filter.Comment[0] = _T('\0');
		CopyString(pszKeyProp, MaxKeyProp, TEXT("Comment"));
		Setting.Read(szKeyName, Filter.Comment, cvLengthOf(Filter.Comment));

		Filter.ID = ++m_IDCount;

		AddFilter(Filter);
	}

	Setting.Close();

	return true;
}
Exemple #5
0
TEST(Settings, Reload)
{
	Settings test;
	ASSERT_TRUE(test.Open("test/config.toml.test"));
	ASSERT_TRUE(test.Reload());
}