blob: 57aac68525c13a4556399201079d33069c51a00a [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.geode.test.dunit.rules.tests;
import static org.apache.geode.test.dunit.VM.getAllVMs;
import static org.apache.geode.test.dunit.VM.getController;
import static org.apache.geode.test.dunit.VM.getVM;
import static org.apache.geode.test.dunit.VM.getVMCount;
import static org.apache.geode.test.dunit.VM.toArray;
import static org.apache.geode.test.junit.runners.TestRunner.runTestWithValidation;
import static org.assertj.core.api.Assertions.assertThat;
import java.io.Serializable;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import com.jayway.jsonpath.Configuration;
import com.jayway.jsonpath.spi.json.JacksonJsonProvider;
import com.jayway.jsonpath.spi.json.JsonProvider;
import com.jayway.jsonpath.spi.mapper.JacksonMappingProvider;
import com.jayway.jsonpath.spi.mapper.MappingProvider;
import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.apache.geode.test.dunit.VM;
import org.apache.geode.test.dunit.rules.DistributedRule;
import org.apache.geode.test.dunit.rules.DistributedUseJacksonForJsonPathRule;
/**
* Distributed tests for {@link DistributedUseJacksonForJsonPathRule}.
*/
@SuppressWarnings("serial")
public class DistributedUseJacksonForJsonPathRuleDistributedTest implements Serializable {
private static final Map<VM, String> jsonProviderMap = new ConcurrentHashMap<>();
private static final Map<VM, String> mappingProviderMap = new ConcurrentHashMap<>();
@Rule
public DistributedRule distributedRule = new DistributedRule();
private String defaultJsonProvider;
private String defaultMappingProvider;
private int initialVmCount;
@Before
public void setUp() {
Configuration config = Configuration.defaultConfiguration();
defaultJsonProvider = config.jsonProvider().getClass().getName();
defaultMappingProvider = config.mappingProvider().getClass().getName();
initialVmCount = getVMCount();
}
@After
public void tearDown() {
jsonProviderMap.clear();
mappingProviderMap.clear();
}
@Test
public void setsJsonProviderToJacksonJsonProviderBeforeTest() {
runTestWithValidation(CaptureJsonProvider.class);
for (VM vm : toArray(getAllVMs(), getController())) {
assertThat(jsonProviderMap.get(vm)).isEqualTo(JacksonJsonProvider.class.getName());
}
}
@Test
public void setsMappingProviderToJacksonMappingProviderBeforeTest() {
runTestWithValidation(CaptureMappingProvider.class);
for (VM vm : toArray(getAllVMs(), getController())) {
assertThat(mappingProviderMap.get(vm)).isEqualTo(JacksonMappingProvider.class.getName());
}
}
@Test
public void restoresJsonProviderToDefaultAfterTest() {
runTestWithValidation(HasUseJacksonForJsonPathRule.class);
for (VM vm : toArray(getAllVMs(), getController())) {
vm.invoke(() -> {
Configuration config = Configuration.defaultConfiguration();
assertThat(config.jsonProvider().getClass().getName()).isEqualTo(defaultJsonProvider);
});
}
}
@Test
public void restoresMappingProviderToDefaultAfterTest() {
runTestWithValidation(HasUseJacksonForJsonPathRule.class);
for (VM vm : toArray(getAllVMs(), getController())) {
vm.invoke(() -> {
Configuration config = Configuration.defaultConfiguration();
assertThat(config.mappingProvider().getClass().getName()).isEqualTo(defaultMappingProvider);
});
}
}
@Test
public void setsJsonProviderToJacksonJsonProviderBeforeTest_inNewVm() {
runTestWithValidation(CaptureJsonProviderInNewVm.class);
VM newVM = getVM(initialVmCount);
assertThat(jsonProviderMap.get(newVM)).isEqualTo(JacksonJsonProvider.class.getName());
}
@Test
public void setsMappingProviderToJacksonMappingProviderBeforeTest_inNewVm() {
runTestWithValidation(CaptureMappingProviderInNewVm.class);
VM newVM = getVM(initialVmCount);
assertThat(mappingProviderMap.get(newVM)).isEqualTo(JacksonMappingProvider.class.getName());
}
@Test
public void restoresJsonProviderToDefaultAfterTest_inNewVm() {
runTestWithValidation(UseJacksonForJsonPathRuleWithNewVm.class);
VM newVM = getVM(initialVmCount);
newVM.invoke(() -> {
Configuration config = Configuration.defaultConfiguration();
assertThat(config.jsonProvider().getClass().getName()).isEqualTo(defaultJsonProvider);
});
}
@Test
public void restoresMappingProviderToDefaultAfterTest_inNewVm() {
runTestWithValidation(UseJacksonForJsonPathRuleWithNewVm.class);
VM newVM = getVM(initialVmCount);
newVM.invoke(() -> {
Configuration config = Configuration.defaultConfiguration();
assertThat(config.mappingProvider().getClass().getName()).isEqualTo(defaultMappingProvider);
});
}
@Test
public void setsJsonProviderToJacksonJsonProviderBeforeTest_inBouncedVm() {
runTestWithValidation(CaptureJsonProviderInBouncedVm.class);
VM bouncedVM = getVM(0);
assertThat(jsonProviderMap.get(bouncedVM)).isEqualTo(JacksonJsonProvider.class.getName());
}
@Test
public void setsMappingProviderToJacksonMappingProviderBeforeTest_inBouncedVm() {
runTestWithValidation(CaptureMappingProviderInBouncedVm.class);
VM bouncedVM = getVM(0);
assertThat(mappingProviderMap.get(bouncedVM)).isEqualTo(JacksonMappingProvider.class.getName());
}
@Test
public void restoresJsonProviderToDefaultAfterTest_inBouncedVm() {
runTestWithValidation(UseJacksonForJsonPathRuleWithBouncedVm.class);
VM bouncedVM = getVM(0);
bouncedVM.invoke(() -> {
Configuration config = Configuration.defaultConfiguration();
assertThat(config.jsonProvider().getClass().getName()).isEqualTo(defaultJsonProvider);
});
}
@Test
public void restoresMappingProviderToDefaultAfterTest_inBouncedVm() {
runTestWithValidation(UseJacksonForJsonPathRuleWithBouncedVm.class);
VM bouncedVM = getVM(0);
bouncedVM.invoke(() -> {
Configuration config = Configuration.defaultConfiguration();
assertThat(config.mappingProvider().getClass().getName()).isEqualTo(defaultMappingProvider);
});
}
public static class HasUseJacksonForJsonPathRule implements Serializable {
@Rule
public DistributedUseJacksonForJsonPathRule useJacksonForJsonPathRule =
new DistributedUseJacksonForJsonPathRule();
@Test
public void doNothing() {
assertThat(useJacksonForJsonPathRule).isNotNull();
}
}
public static class CaptureJsonProvider implements Serializable {
@Rule
public DistributedUseJacksonForJsonPathRule useJacksonForJsonPathRule =
new DistributedUseJacksonForJsonPathRule();
@Test
public void captureJsonProvider() {
for (VM vm : toArray(getAllVMs(), getController())) {
Class<? extends JsonProvider> jsonProviderClass = vm.invoke(() -> {
Configuration config = Configuration.defaultConfiguration();
return config.jsonProvider().getClass();
});
assertThat(jsonProviderClass).isNotNull();
jsonProviderMap.put(vm, jsonProviderClass.getName());
}
}
}
public static class CaptureMappingProvider implements Serializable {
@Rule
public DistributedUseJacksonForJsonPathRule useJacksonForJsonPathRule =
new DistributedUseJacksonForJsonPathRule();
@Test
public void captureMappingProvider() {
for (VM vm : toArray(getAllVMs(), getController())) {
Class<? extends MappingProvider> mappingProviderClass = vm.invoke(() -> {
Configuration config = Configuration.defaultConfiguration();
return config.mappingProvider().getClass();
});
assertThat(mappingProviderClass).isNotNull();
mappingProviderMap.put(vm, mappingProviderClass.getName());
}
}
}
public static class CaptureJsonProviderInNewVm implements Serializable {
@Rule
public DistributedUseJacksonForJsonPathRule useJacksonForJsonPathRule =
new DistributedUseJacksonForJsonPathRule();
@Test
public void captureJsonProviderInNewVm() {
VM newVM = getVM(getVMCount());
Class<? extends JsonProvider> jsonProviderClass = newVM.invoke(() -> {
Configuration config = Configuration.defaultConfiguration();
return config.jsonProvider().getClass();
});
assertThat(jsonProviderClass).isNotNull();
jsonProviderMap.put(newVM, jsonProviderClass.getName());
}
}
public static class CaptureMappingProviderInNewVm implements Serializable {
@Rule
public DistributedUseJacksonForJsonPathRule useJacksonForJsonPathRule =
new DistributedUseJacksonForJsonPathRule();
@Test
public void captureMappingProviderInNewVm() {
VM newVM = getVM(getVMCount());
Class<? extends MappingProvider> mappingProviderClass = newVM.invoke(() -> {
Configuration config = Configuration.defaultConfiguration();
return config.mappingProvider().getClass();
});
assertThat(mappingProviderClass).isNotNull();
mappingProviderMap.put(newVM, mappingProviderClass.getName());
}
}
public static class UseJacksonForJsonPathRuleWithNewVm implements Serializable {
@Rule
public DistributedUseJacksonForJsonPathRule useJacksonForJsonPathRule =
new DistributedUseJacksonForJsonPathRule();
@Test
public void getNewVm() {
getVM(getVMCount());
}
}
public static class CaptureJsonProviderInBouncedVm implements Serializable {
@Rule
public DistributedUseJacksonForJsonPathRule useJacksonForJsonPathRule =
new DistributedUseJacksonForJsonPathRule();
@Test
public void captureJsonProviderInBouncedVm() {
VM vm = getVM(0);
vm.bounce();
Class<? extends JsonProvider> jsonProviderClass = vm.invoke(() -> {
Configuration config = Configuration.defaultConfiguration();
return config.jsonProvider().getClass();
});
assertThat(jsonProviderClass).isNotNull();
jsonProviderMap.put(vm, jsonProviderClass.getName());
}
}
public static class CaptureMappingProviderInBouncedVm implements Serializable {
@Rule
public DistributedUseJacksonForJsonPathRule useJacksonForJsonPathRule =
new DistributedUseJacksonForJsonPathRule();
@Test
public void captureMappingProviderInBouncedVm() {
VM vm = getVM(0);
vm.bounce();
Class<? extends MappingProvider> mappingProviderClass = vm.invoke(() -> {
Configuration config = Configuration.defaultConfiguration();
return config.mappingProvider().getClass();
});
assertThat(mappingProviderClass).isNotNull();
mappingProviderMap.put(vm, mappingProviderClass.getName());
}
}
public static class UseJacksonForJsonPathRuleWithBouncedVm implements Serializable {
@Rule
public DistributedUseJacksonForJsonPathRule useJacksonForJsonPathRule =
new DistributedUseJacksonForJsonPathRule();
@Test
public void getNewVm() {
VM vm = getVM(0);
vm.bounce();
}
}
}