blob: 44effe33a0d79ee2b86ca7e92d07c9c67b2ebd30 [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.timeline;
import java.io.File;
import org.iq80.leveldb.DB;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.yarn.conf.YarnConfiguration;
import static org.junit.jupiter.api.Assertions.assertEquals;
/** Test class for verification of RollingLevelDB. */
public class TestRollingLevelDB {
private Configuration conf = new YarnConfiguration();
private FileSystem lfs;
private MyRollingLevelDB rollingLevelDB;
/** RollingLevelDB for testing that has a setting current time. */
public static class MyRollingLevelDB extends RollingLevelDB {
private long currentTimeMillis;
MyRollingLevelDB() {
super("Test");
this.currentTimeMillis = System.currentTimeMillis();
}
@Override
protected long currentTimeMillis() {
return currentTimeMillis;
}
public void setCurrentTimeMillis(long time) {
this.currentTimeMillis = time;
}
};
@BeforeEach
public void setup() throws Exception {
lfs = FileSystem.getLocal(conf);
File fsPath = new File("target", this.getClass().getSimpleName() +
"-tmpDir").getAbsoluteFile();
conf.set(YarnConfiguration.TIMELINE_SERVICE_LEVELDB_PATH,
fsPath.getAbsolutePath());
lfs.delete(new Path(fsPath.getAbsolutePath()), true);
rollingLevelDB = new MyRollingLevelDB();
}
@Test
void testInsertAfterRollPeriodRollsDB() throws Exception {
rollingLevelDB.init(conf);
long now = rollingLevelDB.currentTimeMillis();
DB db = rollingLevelDB.getDBForStartTime(now);
long startTime = rollingLevelDB.getStartTimeFor(db);
assertEquals(rollingLevelDB.computeCurrentCheckMillis(now),
startTime,
"Received level db for incorrect start time");
now = rollingLevelDB.getNextRollingTimeMillis();
rollingLevelDB.setCurrentTimeMillis(now);
db = rollingLevelDB.getDBForStartTime(now);
startTime = rollingLevelDB.getStartTimeFor(db);
assertEquals(rollingLevelDB.computeCurrentCheckMillis(now),
startTime,
"Received level db for incorrect start time");
}
@Test
void testInsertForPreviousPeriodAfterRollPeriodRollsDB()
throws Exception {
rollingLevelDB.init(conf);
long now = rollingLevelDB.currentTimeMillis();
now = rollingLevelDB.computeCurrentCheckMillis(now);
rollingLevelDB.setCurrentTimeMillis(now);
DB db = rollingLevelDB.getDBForStartTime(now - 1);
long startTime = rollingLevelDB.getStartTimeFor(db);
assertEquals(rollingLevelDB.computeCurrentCheckMillis(now - 1),
startTime,
"Received level db for incorrect start time");
}
}