// Copyright 2016 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.net.smoke;
import androidx.test.core.app.ApplicationProvider;
import org.junit.runner.Description;
import org.junit.runners.model.Statement;
import org.chromium.base.ContextUtils;
import org.chromium.base.PathUtils;
import java.io.File;
/**
* Test base class for testing native Engine implementation. This class can import classes from the
* org.chromium.base package.
*/
public class NativeCronetTestRule extends CronetSmokeTestRule {
private static final String PRIVATE_DATA_DIRECTORY_SUFFIX = "cronet_test";
private static final String LOGFILE_NAME = "cronet-netlog.json";
@Override
public Statement apply(final Statement base, Description desc) {
return super.apply(
new Statement() {
@Override
public void evaluate() throws Throwable {
ruleSetUp();
base.evaluate();
ruleTearDown();
}
},
desc);
}
@Override
public void initCronetEngine() {
super.initCronetEngine();
assertNativeEngine(mCronetEngine);
startNetLog();
}
private void ruleSetUp() throws Exception {
ContextUtils.initApplicationContext(ApplicationProvider.getApplicationContext());
PathUtils.setPrivateDataDirectorySuffix(PRIVATE_DATA_DIRECTORY_SUFFIX);
getTestSupport().loadTestNativeLibrary();
}
private void ruleTearDown() throws Exception {
stopAndSaveNetLog();
}
private void startNetLog() {
if (mCronetEngine != null) {
mCronetEngine.startNetLogToFile(
PathUtils.getDataDirectory() + "/" + LOGFILE_NAME, false);
}
}
private void stopAndSaveNetLog() {
if (mCronetEngine == null) return;
mCronetEngine.stopNetLog();
File netLogFile = new File(PathUtils.getDataDirectory(), LOGFILE_NAME);
if (!netLogFile.exists()) return;
getTestSupport().processNetLog(ApplicationProvider.getApplicationContext(), netLogFile);
}
@Override
protected TestSupport initTestSupport() {
return new ChromiumNativeTestSupport();
}
}