blob: 0aad5190f70446615688d8dc0b7ff850fc0c7f82 [file] [log] [blame]
/*=============================================================================#
# Copyright (c) 2019 Stephan Wahlbrink and others.
#
# This program and the accompanying materials are made available under the
# terms of the Eclipse Public License 2.0 which is available at
# https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
# which is available at https://www.apache.org/licenses/LICENSE-2.0.
#
# SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
#
# Contributors:
# Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
#=============================================================================*/
package org.eclipse.statet.rj.servi.pool;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import java.util.ArrayList;
import java.util.List;
import java.util.NoSuchElementException;
import javax.management.OperationsException;
import javax.security.auth.login.LoginException;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runners.model.MultipleFailureException;
import org.eclipse.statet.jcommons.rmi.RMIRegistry;
import org.eclipse.statet.jcommons.rmi.RMIRegistryManager;
import org.eclipse.statet.jcommons.status.NullProgressMonitor;
import org.eclipse.statet.jcommons.status.Status;
import org.eclipse.statet.jcommons.status.StatusException;
import org.eclipse.statet.rj.RjException;
import org.eclipse.statet.rj.data.RDataUtils;
import org.eclipse.statet.rj.data.UnexpectedRDataException;
import org.eclipse.statet.rj.server.util.RJContext;
import org.eclipse.statet.rj.servi.RServi;
import org.eclipse.statet.rj.servi.RServiUtils;
import org.eclipse.statet.rj.servi.node.RServiImpl;
import org.eclipse.statet.rj.servi.node.RServiNodeConfig;
import org.eclipse.statet.rj.servi.node.RServiNodeFactory;
import org.eclipse.statet.rj.servi.node.RServiNodeManager;
public class LocalNodeTest extends AbstractServiTest {
private RServiNodeManager localR;
public LocalNodeTest() {
}
@Before
public void initNode() throws RjException, StatusException {
final RJContext context= ServiTests.getRJContext();
final RMIRegistry rmiRegistry= RMIRegistryManager.INSTANCE.getEmbeddedPrivateRegistry(
new NullProgressMonitor() );
final RServiNodeFactory nodeFactory= RServiImpl.createLocalNodeFactory(
"LocalNodeTest", context );
nodeFactory.setRegistry(rmiRegistry);
nodeFactory.setConfig(new RServiNodeConfig());
this.localR= RServiImpl.createNodeManager("LocalNodeTest", rmiRegistry, nodeFactory);
}
@After
public void dispose() throws Exception {
final List<Throwable> exceptions= new ArrayList<>();
disposeServis(exceptions);
try {
if (this.localR != null) {
this.localR.stop();
}
}
catch (final Exception e) {
exceptions.add(e);
}
finally {
this.localR= null;
}
MultipleFailureException.assertEmpty(exceptions);
}
private RServi getServi(final String id) throws NoSuchElementException, LoginException, StatusException {
final RServi servi= RServiUtils.getRServi(this.localR, id);
onServiGet(servi);
return servi;
}
@Test
public void test1() throws RjException, OperationsException,
NoSuchElementException, LoginException, StatusException, UnexpectedRDataException {
this.localR.start();
final RServi servi1= getServi("test1");
assertNodeOperative(servi1);
closeServi(servi1);
}
@Test
public void closed() throws RjException, OperationsException,
NoSuchElementException, LoginException, StatusException, UnexpectedRDataException {
this.localR.start();
final RServi servi1= getServi("test1");
assertNodeOperative(servi1);
assertEquals(false, servi1.isClosed());
closeServi(servi1);
assertEquals(true, servi1.isClosed());
try {
assertNodeOperative(servi1);
throw new AssertionError("not closed");
}
catch (final StatusException e) {
final Status eStatus= e.getStatus();
assertEquals(Status.ERROR, eStatus.getSeverity());
assertTrue(e.getMessage().contains("closed"));
}
}
@Test
public void cleanup() throws RjException, OperationsException,
NoSuchElementException, LoginException, StatusException, UnexpectedRDataException {
this.localR.start();
final RServi servi1= getServi("test1");
servi1.evalVoid("x <- 123L", null);
servi1.evalVoid(".x <- 123L", null);
assertEquals(true, RDataUtils.checkSingleLogiValue(servi1.evalData("exists(\"x\")", null)));
assertEquals(true, RDataUtils.checkSingleLogiValue(servi1.evalData("exists(\".x\")", null)));
closeServi(servi1);
final RServi servi2= getServi("test1");
assertEquals(false, RDataUtils.checkSingleLogiValue(servi2.evalData("exists(\"x\")", null)));
assertEquals(false, RDataUtils.checkSingleLogiValue(servi2.evalData("exists(\".x\")", null)));
closeServi(servi2);
}
}