blob: 9aa8593a874eb8b1c6acc3e2b710f161b028c842 [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.
*/
package org.apache.hadoop.yarn.server.timelineservice.storage.common;
import org.junit.jupiter.api.Test;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.hadoop.yarn.api.records.ApplicationId;
import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNull;
import static org.junit.jupiter.api.Assertions.assertTrue;
/**
* Unit tests for key converters for various tables' row keys.
*
*/
public class TestKeyConverters {
@Test
void testAppIdKeyConverter() {
AppIdKeyConverter appIdKeyConverter = new AppIdKeyConverter();
long currentTs = System.currentTimeMillis();
ApplicationId appId1 = ApplicationId.newInstance(currentTs, 1);
ApplicationId appId2 = ApplicationId.newInstance(currentTs, 2);
ApplicationId appId3 = ApplicationId.newInstance(currentTs + 300, 1);
String appIdStr1 = appId1.toString();
String appIdStr2 = appId2.toString();
String appIdStr3 = appId3.toString();
byte[] appIdBytes1 = appIdKeyConverter.encode(appIdStr1);
byte[] appIdBytes2 = appIdKeyConverter.encode(appIdStr2);
byte[] appIdBytes3 = appIdKeyConverter.encode(appIdStr3);
// App ids' should be encoded in a manner wherein descending order
// is maintained.
assertTrue(
Bytes.compareTo(appIdBytes1, appIdBytes2) > 0
&& Bytes.compareTo(appIdBytes1, appIdBytes3) > 0
&& Bytes.compareTo(appIdBytes2, appIdBytes3) > 0,
"Ordering of app ids' is incorrect");
String decodedAppId1 = appIdKeyConverter.decode(appIdBytes1);
String decodedAppId2 = appIdKeyConverter.decode(appIdBytes2);
String decodedAppId3 = appIdKeyConverter.decode(appIdBytes3);
assertEquals(appIdStr1, decodedAppId1);
assertEquals(appIdStr2, decodedAppId2);
assertEquals(appIdStr3, decodedAppId3);
}
@Test
void testEventColumnNameConverter() {
String eventId = "=foo_=eve=nt=";
byte[] valSepBytes = Bytes.toBytes(Separator.VALUES.getValue());
byte[] maxByteArr =
Bytes.createMaxByteArray(Bytes.SIZEOF_LONG - valSepBytes.length);
byte[] ts = Bytes.add(valSepBytes, maxByteArr);
Long eventTs = Bytes.toLong(ts);
byte[] byteEventColName =
new EventColumnName(eventId, eventTs, null).getColumnQualifier();
KeyConverter<EventColumnName> eventColumnNameConverter =
new EventColumnNameConverter();
EventColumnName eventColName =
eventColumnNameConverter.decode(byteEventColName);
assertEquals(eventId, eventColName.getId());
assertEquals(eventTs, eventColName.getTimestamp());
assertNull(eventColName.getInfoKey());
String infoKey = "f=oo_event_in=fo=_key";
byteEventColName =
new EventColumnName(eventId, eventTs, infoKey).getColumnQualifier();
eventColName = eventColumnNameConverter.decode(byteEventColName);
assertEquals(eventId, eventColName.getId());
assertEquals(eventTs, eventColName.getTimestamp());
assertEquals(infoKey, eventColName.getInfoKey());
}
@Test
void testLongKeyConverter() {
LongKeyConverter longKeyConverter = new LongKeyConverter();
confirmLongKeyConverter(longKeyConverter, Long.MIN_VALUE);
confirmLongKeyConverter(longKeyConverter, -1234567890L);
confirmLongKeyConverter(longKeyConverter, -128L);
confirmLongKeyConverter(longKeyConverter, -127L);
confirmLongKeyConverter(longKeyConverter, -1L);
confirmLongKeyConverter(longKeyConverter, 0L);
confirmLongKeyConverter(longKeyConverter, 1L);
confirmLongKeyConverter(longKeyConverter, 127L);
confirmLongKeyConverter(longKeyConverter, 128L);
confirmLongKeyConverter(longKeyConverter, 1234567890L);
confirmLongKeyConverter(longKeyConverter, Long.MAX_VALUE);
}
private void confirmLongKeyConverter(LongKeyConverter longKeyConverter,
Long testValue) {
Long decoded = longKeyConverter.decode(longKeyConverter.encode(testValue));
assertEquals(testValue, decoded);
}
@Test
void testStringKeyConverter() {
StringKeyConverter stringKeyConverter = new StringKeyConverter();
String phrase = "QuackAttack now!";
for (int i = 0; i < phrase.length(); i++) {
String sub = phrase.substring(i, phrase.length());
confirmStrignKeyConverter(stringKeyConverter, sub);
confirmStrignKeyConverter(stringKeyConverter, sub + sub);
}
}
private void confirmStrignKeyConverter(StringKeyConverter stringKeyConverter,
String testValue) {
String decoded =
stringKeyConverter.decode(stringKeyConverter.encode(testValue));
assertEquals(testValue, decoded);
}
}