blob: 08a2b928114013f1e8f6fd26f267bbcb93d4ab2d [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.ignite.p2p;
import java.io.File;
import java.io.IOException;
import java.util.Collections;
import java.util.UUID;
import org.apache.ignite.Ignite;
import org.apache.ignite.IgniteException;
import org.apache.ignite.configuration.DeploymentMode;
import org.apache.ignite.configuration.IgniteConfiguration;
import org.apache.ignite.internal.util.typedef.internal.U;
import org.apache.ignite.spi.deployment.uri.UriDeploymentSpi;
import org.apache.ignite.testframework.junits.common.GridCommonAbstractTest;
import org.apache.ignite.testframework.junits.common.GridCommonTest;
import org.junit.Test;
/**
* Test what happens if peer class loading is disabled.
* <p>
* In order for this test to run, make sure that your
* {@code p2p.uri.cls} folder ends with {@code .gar} extension.
*/
@SuppressWarnings({"ProhibitedExceptionDeclared"})
@GridCommonTest(group = "P2P")
public class GridP2PDisabledSelfTest extends GridCommonAbstractTest {
/** Task name. */
private static final String TASK_NAME = "org.apache.ignite.tests.p2p.P2PTestTaskExternalPath1";
/** External class loader. */
private static ClassLoader extLdr;
/** Current deployment mode. Used in {@link #getConfiguration(String)}. */
private DeploymentMode depMode;
/** */
private boolean initGar;
/** Path to GAR file. */
private String garFile;
/**
*
*/
public GridP2PDisabledSelfTest() {
super(/*start grid*/false);
}
/** {@inheritDoc} */
@Override protected void beforeTestsStarted() throws Exception {
extLdr = getExternalClassLoader();
}
/** {@inheritDoc} */
@Override protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception {
IgniteConfiguration cfg = super.getConfiguration(igniteInstanceName);
cfg.setPeerClassLoadingEnabled(false);
cfg.setDeploymentMode(depMode);
if (initGar) {
UriDeploymentSpi depSpi = new UriDeploymentSpi();
depSpi.setUriList(Collections.singletonList(garFile));
cfg.setDeploymentSpi(depSpi);
}
cfg.setMetricsUpdateFrequency(500);
return cfg;
}
/**
* Test what happens if peer class loading is disabled.
*
* @throws Exception if error occur.
*/
@SuppressWarnings("unchecked")
private void checkClassNotFound() throws Exception {
initGar = false;
try {
Ignite ignite1 = startGrid(1);
Ignite ignite2 = startGrid(2);
Class task = extLdr.loadClass(TASK_NAME);
try {
ignite1.compute().execute(task, ignite2.cluster().localNode().id());
assert false;
}
catch (IgniteException e) {
info("Received expected exception: " + e);
}
}
finally {
stopGrid(1);
stopGrid(2);
}
}
/**
* @throws Exception if error occur.
*/
private void checkGar() throws Exception {
initGar = true;
String garDir = "modules/extdata/p2p/target/deploy";
String garFileName = "p2p.gar";
File origGarPath = U.resolveIgnitePath(garDir + '/' + garFileName);
File tmpPath = new File(System.getProperty("java.io.tmpdir"), UUID.randomUUID().toString());
if (!tmpPath.mkdir())
throw new IOException("Can not create temp directory");
try {
File newGarFile = new File(tmpPath, garFileName);
U.copy(origGarPath, newGarFile, false);
assert newGarFile.exists();
try {
garFile = "file:///" + tmpPath.getAbsolutePath();
try {
Ignite ignite1 = startGrid(1);
Ignite ignite2 = startGrid(2);
Integer res = ignite1.compute().<UUID, Integer>execute(TASK_NAME, ignite2.cluster().localNode().id());
assert res != null;
}
finally {
stopGrid(1);
stopGrid(2);
}
}
finally {
if (newGarFile != null && !newGarFile.delete())
error("Can not delete temp gar file");
}
}
finally {
if (!tmpPath.delete())
error("Can not delete temp directory");
}
}
/**
* Test GridDeploymentMode.ISOLATED mode.
*
* @throws Exception if error occur.
*/
@Test
public void testGarPrivateMode() throws Exception {
depMode = DeploymentMode.PRIVATE;
checkGar();
}
/**
* Test GridDeploymentMode.ISOLATED mode.
*
* @throws Exception if error occur.
*/
@Test
public void testGarIsolatedMode() throws Exception {
depMode = DeploymentMode.ISOLATED;
checkGar();
}
/**
* Test GridDeploymentMode.CONTINUOUS mode.
*
* @throws Exception if error occur.
*/
@Test
public void testGarContinuousMode() throws Exception {
depMode = DeploymentMode.CONTINUOUS;
checkGar();
}
/**
* Test GridDeploymentMode.SHARED mode.
*
* @throws Exception if error occur.
*/
@Test
public void testGarSharedMode() throws Exception {
depMode = DeploymentMode.SHARED;
checkGar();
}
}