/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
*
* 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.kie.server.services.impl;
import org.assertj.core.api.Assertions;
import org.drools.compiler.kie.builder.impl.InternalKieContainer;
import org.drools.compiler.kie.builder.impl.InternalKieModule;
import org.junit.Test;
import org.kie.api.KieServices;
import org.kie.api.builder.KieFileSystem;
import org.kie.api.builder.KieModule;
import org.kie.scanner.MavenRepository;
import org.kie.server.api.marshalling.Marshaller;
import org.kie.server.api.marshalling.MarshallingFormat;
import org.kie.server.api.model.KieContainerResource;
import org.kie.server.api.model.KieContainerStatus;
import org.kie.server.api.model.ReleaseId;
public class KieContainerInstanceImplTest {
private static final String CONTAINER_ID = "my-container";
private static final String GROUP_ID = "org.kie.server.test";
private static final String ARTIFACT_ID = "my-test-artifact";
private static final String VERSION_100 = "1.0.0.Final";
private static final String VERSION_101 = "1.0.1.Final";
private static final ReleaseId RELEASE_ID_100 = new ReleaseId(GROUP_ID, ARTIFACT_ID, VERSION_100);
private static final ReleaseId RELEASE_ID_101 = new ReleaseId(GROUP_ID, ARTIFACT_ID, VERSION_101);
@Test
public void testUpdatingOfReleaseId() {
createEmptyKjar(GROUP_ID, ARTIFACT_ID, VERSION_100);
createEmptyKjar(GROUP_ID, ARTIFACT_ID, VERSION_101);
KieServices ks = KieServices.Factory.get();
InternalKieContainer kieContainer = (InternalKieContainer) ks.newKieContainer(CONTAINER_ID, RELEASE_ID_100);
KieContainerInstanceImpl containerInstance = new KieContainerInstanceImpl(CONTAINER_ID, KieContainerStatus.STARTED, kieContainer);
Marshaller marshaller = containerInstance.getMarshaller(MarshallingFormat.JAXB);
// Call getResource() and verify release id
KieContainerResource containerResource = containerInstance.getResource();
Assertions.assertThat(containerResource).isNotNull();
verifyReleaseId(containerResource.getReleaseId(), RELEASE_ID_100);
verifyReleaseId(containerResource.getResolvedReleaseId(), RELEASE_ID_100);
// Marshaller is same - no change in release id
Marshaller updatedMarshaller = containerInstance.getMarshaller(MarshallingFormat.JAXB);
Assertions.assertThat(updatedMarshaller).isEqualTo(marshaller);
// Setting kie container with version change
containerInstance.getKieContainer().updateToVersion(RELEASE_ID_101);
// Call getResource() and verify release id
containerResource = containerInstance.getResource();
Assertions.assertThat(containerResource).isNotNull();
verifyReleaseId(containerResource.getReleaseId(), RELEASE_ID_101);
verifyReleaseId(containerResource.getResolvedReleaseId(), RELEASE_ID_101);
// Marshaller is different - release id was updated
updatedMarshaller = containerInstance.getMarshaller(MarshallingFormat.JAXB);
Assertions.assertThat(updatedMarshaller).isNotEqualTo(marshaller);
}
private void verifyReleaseId(ReleaseId actualReleaseId, ReleaseId expectedReleaseId) {
Assertions.assertThat(actualReleaseId).isNotNull();
Assertions.assertThat(actualReleaseId.getGroupId()).isEqualTo(expectedReleaseId.getGroupId());
Assertions.assertThat(actualReleaseId.getArtifactId()).isEqualTo(expectedReleaseId.getArtifactId());
Assertions.assertThat(actualReleaseId.getVersion()).isEqualTo(expectedReleaseId.getVersion());
}
private void createEmptyKjar(String groupId, String artifactId, String version) {
// create empty kjar; content does not matter
KieServices kieServices = KieServices.Factory.get();
KieFileSystem kfs = kieServices.newKieFileSystem();
org.kie.api.builder.ReleaseId releaseId = kieServices.newReleaseId(groupId, artifactId, version);
kfs.generateAndWritePomXML(releaseId);
KieModule kieModule = kieServices.newKieBuilder( kfs ).buildAll().getKieModule();
byte[] pom = kfs.read("pom.xml");
byte[] jar = ((InternalKieModule)kieModule).getBytes();
MavenRepository.getMavenRepository().installArtifact(releaseId, jar, pom);
}
}