Skip to content

Commit

Permalink
fix (#276): Ensure that the name property of @ComponentApplication is…
Browse files Browse the repository at this point in the history
… applied
  • Loading branch information
geoand committed Jul 18, 2019
1 parent 9e704c3 commit d0d2826
Show file tree
Hide file tree
Showing 8 changed files with 172 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ public void shouldExposeService() {
Optional<Component> component = findFirst(list, Component.class);
assertTrue(component.isPresent());
assertTrue(component.get().getSpec().isExposeService());
assertEquals("issue-254", component.get().getMetadata().getName());
assertEquals(8080, (long)component.get().getSpec().getPort());
}

Expand Down
64 changes: 64 additions & 0 deletions annotations/component-annotations/src/it/issue-276/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.5.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>io.dekorate</groupId>
<artifactId>issue-276</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>Dekorate :: Annotation :: Component :: Integration Test for #276</name>
<description>Regression test for issue #276. Ensure @Component name is propagated to metadata</description>

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>io.dekorate</groupId>
<artifactId>kubernetes-spring-starter</artifactId>
<version>@project.version@</version>
</dependency>
<dependency>
<groupId>io.dekorate</groupId>
<artifactId>component-annotations</artifactId>
<version>@project.version@</version>
</dependency>

<!-- Testing -->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>@version.junit-jupiter@</version>
<scope>test</scope>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>@version.maven-surefire-plugin@</version>
<inherited>true</inherited>
<configuration>
<useSystemClassLoader>false</useSystemClassLoader>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>@version.maven-compiler-plugin@</version>
<configuration>
<source>@java.source@</source>
<target>@java.target@</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
/**
* Copyright 2018 The original authors.
*
* Licensed 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 io.dekorate.issue276;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class Controller {

@RequestMapping("/")
public String hello() {
return "Hello world";
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package io.dekorate.issue276;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

import io.dekorate.component.annotation.ComponentApplication;

@SpringBootApplication
@ComponentApplication(exposeService=true, name="customName")
public class DemoApplication {

public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
server.port=9090
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
/**
* Copyright 2018 The original authors.
*
* Licensed 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 io.dekorate.issue276;

import io.dekorate.deps.kubernetes.api.model.KubernetesList;
import io.dekorate.deps.kubernetes.api.model.HasMetadata;
import io.dekorate.component.model.Component;
import io.dekorate.utils.Serialization;
import java.util.List;
import java.util.Optional;
import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNotNull;
import static org.junit.jupiter.api.Assertions.assertTrue;

public class Issue276Test {

@Test
public void shouldExposeServiceAndHaveCorrectPort() {
KubernetesList list = Serialization.unmarshal(getClass().getClassLoader().getResourceAsStream("META-INF/dekorate/component.yml"));
assertNotNull(list);
Optional<Component> component = findFirst(list, Component.class);
assertTrue(component.isPresent());
assertTrue(component.get().getSpec().isExposeService());
assertEquals("customName", component.get().getMetadata().getName());
assertEquals("customName", component.get().getMetadata().getLabels().get("app"));
assertEquals(9090, (long)component.get().getSpec().getPort());
}

<T extends HasMetadata> Optional<T> findFirst(KubernetesList list, Class<T> t) {
return (Optional<T>) list.getItems().stream()
.filter(i -> t.isInstance(i))
.findFirst();
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -42,9 +42,11 @@
import io.dekorate.kubernetes.configurator.ApplyAutoBuild;
import io.dekorate.project.ApplyProjectInfo;
import io.dekorate.project.Project;
import io.dekorate.utils.Labels;
import io.dekorate.utils.Strings;

import java.nio.file.Path;
import java.util.Map;
import java.util.Optional;

public class ComponentHandler implements HandlerFactory, Handler<ComponentConfig>, WithProject {
Expand Down Expand Up @@ -150,10 +152,12 @@ private BaseConfig getKubernetesConfig() {
* @return The component.
*/
private Component createComponent(ComponentConfig config) {
return new ComponentBuilder()
Map<String, String> labels = resources.getLabels();
labels.put(Labels.APP, config.getName());
return new ComponentBuilder()
.withNewMetadata()
.withName(resources.getName())
.withLabels(resources.getLabels())
.withName(config.getName())
.withLabels(labels)
.endMetadata()
.withNewSpec()
.withDeploymentMode(config.getDeploymentMode())
Expand Down
6 changes: 3 additions & 3 deletions core/src/main/java/io/dekorate/utils/Labels.java
Original file line number Diff line number Diff line change
Expand Up @@ -25,9 +25,9 @@

public class Labels {

private static final String APP = "app";
private static final String VERSION = "version";
private static final String GROUP = "group";
public static final String APP = "app";
public static final String VERSION = "version";
public static final String GROUP = "group";

/**
* Creates a {@link Map} with the labels for the {@link BaseConfig}.
Expand Down

0 comments on commit d0d2826

Please sign in to comment.