blob: d7cc090f6772db303d94fa17723cccf2e9a66876 [file] [log] [blame]
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
#include "workload_mgmt/workload-management.h"
#include <gflags/gflags_declare.h>
#include <gtest/gtest.h>
#include "gen-cpp/ErrorCodes_types.h"
#include "gen-cpp/SystemTables_types.h"
#include "kudu/util/version_util.h"
#include "testutil/death-test-util.h"
#include "testutil/gtest-util.h"
DECLARE_string(query_log_table_name);
DECLARE_string(workload_mgmt_schema_version);
using namespace std;
using namespace impala;
using namespace impala::workloadmgmt;
using kudu::ParseVersion;
using kudu::Version;
TEST(WorkloadManagementTest, ParseSchemaVersionFlagHappyPath) {
// Asserts any valid version can be parsed.
FLAGS_workload_mgmt_schema_version = "0.0.0";
Version v;
ASSERT_OK(ParseSchemaVersionFlag(&v));
ASSERT_EQ("0.0.0", v.ToString());
}
TEST(WorkloadManagementTest, ParseSchemaVersionFlagEmpty) {
// Asserts an empty schema version flag defaults to the latest version;
FLAGS_workload_mgmt_schema_version = "";
Version v;
ASSERT_OK(ParseSchemaVersionFlag(&v));
ASSERT_EQ("1.2.0", v.ToString());
}
TEST(WorkloadManagementTest, ParseSchemaVersionFlagInvalid) {
// Asserts the correct error is returned when the workload management schema version is
// set to an invalid version string.
FLAGS_workload_mgmt_schema_version = "notaversion";
Version v;
Status actual = ParseSchemaVersionFlag(&v);
EXPECT_EQ(TErrorCode::GENERAL, actual.code());
EXPECT_EQ(
actual.msg().msg(), "Invalid workload management schema version 'notaversion'");
}
TEST(WorkloadManagementTest, StartupChecksHappyPath) {
// Asserts the StartupChecks function works on older schema versions.
Version v;
ASSERT_TRUE(ParseVersion("1.1.0", &v).ok());
ASSERT_OK(StartupChecks(v));
EXPECT_TRUE(IncludeField(TQueryTableColumn::CLUSTER_ID));
EXPECT_TRUE(IncludeField(TQueryTableColumn::SELECT_COLUMNS));
}
TEST(WorkloadManagementTest, StartupChecksHappyPathOlderVersion) {
// Asserts the StartupChecks function works on older schema versions.
Version v;
ASSERT_TRUE(ParseVersion("1.0.0", &v).ok());
ASSERT_OK(StartupChecks(v));
EXPECT_TRUE(IncludeField(TQueryTableColumn::CLUSTER_ID));
EXPECT_FALSE(IncludeField(TQueryTableColumn::SELECT_COLUMNS));
}
TEST(WorkloadManagementTest, StartupChecksUnknownVersion) {
Version v;
ASSERT_TRUE(ParseVersion("99999.99999.99999", &v).ok());
Status ret = StartupChecks(v);
EXPECT_EQ(TErrorCode::type::GENERAL, ret.code());
EXPECT_EQ("Workload management schema version '99999.99999.99999' is not one of the "
"known versions: '1.0.0', '1.1.0', '1.2.0'",
ret.msg().msg());
}
TEST(WorkloadManagementDeathTest, IncludeFieldMissing) {
// Asserts the case where the FIELD_DEFINITIONS map is missing a column, and that
// column is checked for inclusion.
GTEST_FLAG_SET(death_test_style, "threadsafe");
IMPALA_ASSERT_DEBUG_DEATH(IncludeField(static_cast<TQueryTableColumn::type>(9999)),
"impala::workloadmgmt::IncludeField()");
}
TEST(WorkloadManagementTest, QueryLogTableNameWithoutDb) {
FLAGS_query_log_table_name = "fOObaR";
ASSERT_EQ("foobar", QueryLogTableName(false));
}
TEST(WorkloadManagementTest, QueryLogTableNameWithDb) {
FLAGS_query_log_table_name = "FOobAr";
ASSERT_EQ("sys.foobar", QueryLogTableName(true));
}
TEST(WorkloadManagementTest, QueryLiveTableNameWithoutDb) {
ASSERT_EQ("impala_query_live", QueryLiveTableName(false));
}
TEST(WorkloadManagementTest, QueryLiveTableNameWithDb) {
ASSERT_EQ("sys.impala_query_live", QueryLiveTableName(true));
}
TEST(WorkloadManagementTest, KnownVersions) {
// Asserts the known versions are correct and are in the correct order in the
// KNOWN_VERSIONS set.
ASSERT_EQ(3, KNOWN_VERSIONS.size());
auto iter = KNOWN_VERSIONS.cbegin();
EXPECT_EQ("1.0.0", iter->ToString());
iter++;
EXPECT_EQ("1.1.0", iter->ToString());
iter++;
EXPECT_EQ("1.2.0", iter->ToString());
iter++;
EXPECT_EQ(KNOWN_VERSIONS.cend(), iter);
}