Added tests and selenium.

This commit is contained in:
Andrew Pitt 2020-01-06 12:15:30 -05:00
parent 9f3a641789
commit 974db5aafe
6 changed files with 328 additions and 2 deletions

46
pom.xml
View file

@ -10,7 +10,7 @@
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.6.RELEASE</version>
<version>2.2.2.RELEASE</version>
</parent>
<name>petclinic</name>
@ -108,6 +108,11 @@
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
</dependency>
</dependencies>
<build>
@ -208,9 +213,48 @@
</dependency>
</dependencies>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<excludes>
<exclude>**/integration/*</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
<profiles>
<profile>
<id>failsafe</id>
<build>
<plugins>
<plugin>
<artifactId>maven-failsafe-plugin</artifactId>
<version>2.22.0</version>
<configuration>
<includes>
<include>**/integration/*</include>
</includes>
<excludes>
<exclude>**/test/*</exclude>
</excludes>
</configuration>
<executions>
<execution>
<goals>
<goal>integration-test</goal>
<goal>verify</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
</profiles>
<!-- Apache 2 license -->
<licenses>
<license>

116
resources/app-template.yaml Normal file
View file

@ -0,0 +1,116 @@
kind: Template
apiVersion: v1
metadata:
name: app-template
annotations:
openshift.io/display-name: "Demo App Example: Front End App"
description: >-
Front End App
openshift.io/long-description: >-
This template defines resources needed to deploy a simple demo app.
tags: "quickstart,java,demo"
iconClass: icon-openjdk
openshift.io/provider-display-name: "Nobody, Inc."
openshift.io/documentation-url: "https://github.com/pittar/ocp-devops-setup"
openshift.io/support-url: "https://google.ca"
message: "Your app is being instantiated."
labels:
template: "demo-app-frontend-template"
app: "demo-app-frontend"
objects:
- apiVersion: apps.openshift.io/v1
kind: DeploymentConfig
metadata:
name: frontend
spec:
replicas: 1
revisionHistoryLimit: 10
selector:
deploymentConfig: frontend
strategy:
activeDeadlineSeconds: 21600
resources: {}
rollingParams:
intervalSeconds: 1
maxSurge: 25%
maxUnavailable: 25%
timeoutSeconds: 600
updatePeriodSeconds: 1
type: Rolling
template:
metadata:
labels:
deploymentConfig: frontend
name: frontend
spec:
containers:
- name: frontend
envFrom:
- configMapRef:
name: frontend-cm
imagePullPolicy: Always
ports:
- containerPort: 8778
name: jolokia
protocol: TCP
- containerPort: 8080
name: http
protocol: TCP
- containerPort: 8443
name: https
protocol: TCP
resources: {}
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
dnsPolicy: ClusterFirst
restartPolicy: Always
schedulerName: default-scheduler
securityContext: {}
terminationGracePeriodSeconds: 75
test: false
triggers:
- imageChangeParams:
automatic: false
containerNames:
- frontend
from:
kind: ImageStreamTag
name: ${IMAGE_NAME}:${IMAGE_TAG}
namespace: cicd
type: ImageChange
- apiVersion: v1
kind: Service
metadata:
name: frontend
spec:
ports:
- port: 8080
protocol: TCP
targetPort: 8080
selector:
deploymentConfig: frontend
sessionAffinity: None
type: ClusterIP
status:
loadBalancer: {}
- apiVersion: route.openshift.io/v1
kind: Route
metadata:
name: frontend
spec:
to:
kind: Service
name: frontend
weight: 100
wildcardPolicy: None
parameters:
- name: IMAGE_NAME
displayName: Frontend image
description: The frontend image to use.
value: frontend
required: true
- name: IMAGE_TAG
displayName: Frontend image tag
description: The tag (version) of the frontend image to use.
value: latest
required: true

View file

@ -0,0 +1,95 @@
apiVersion: v1
kind: Template
metadata:
name: jenkins-java-pipeline
parameters:
- name: APP_NAME
description: Name of the container to build.
displayName: Application container name.
required: true
- name: GIT_SOURCE_URL
description: The source URL for the application
displayName: Source URL
required: true
- name: GIT_SOURCE_REF
description: The source Ref for the application
displayName: Source Ref
required: true
value: master
- description: Github trigger secret. A difficult to guess string encoded as part of the webhook URL. Not encrypted.
displayName: GitHub Webhook Secret
from: '[a-zA-Z0-9]{40}'
generate: expression
name: GITHUB_WEBHOOK_SECRET
required: true
- description: A secret string used to configure the Generic webhook.
displayName: Generic Webhook Secret
from: '[a-zA-Z0-9]{40}'
generate: expression
name: GENERIC_WEBHOOK_SECRET
required: true
labels:
template: "demo-app-build-template"
app: "demo-app-build"
objects:
- apiVersion: v1
kind: ImageStream
metadata:
name: ${APP_NAME}
spec: {}
status:
dockerImageRepository: ""
- apiVersion: v1
kind: BuildConfig
metadata:
creationTimestamp: null
labels:
name: ${APP_NAME}
name: ${APP_NAME}
spec:
strategy:
jenkinsPipelineStrategy:
jenkinsfilePath: Jenkinsfile
env:
- name: APP_NAME
value: ${APP_NAME}
- name: GIT_SOURCE_URL
value: ${GIT_SOURCE_URL}
- name: GIT_SOURCE_REF
value: ${GIT_SOURCE_REF}
type: JenkinsPipeline
source:
git:
uri: "${GIT_SOURCE_URL}"
ref: "${GIT_SOURCE_REF}"
type: "Git"
triggers:
- github:
secret: "${GITHUB_WEBHOOK_SECRET}"
type: GitHub
- generic:
secret: "${GENERIC_WEBHOOK_SECRET}"
type: Generic
- apiVersion: v1
kind: BuildConfig
metadata:
name: "${APP_NAME}-build"
spec:
output:
to:
kind: ImageStreamTag
name: ${APP_NAME}:latest
postCommit: {}
resources: {}
runPolicy: Serial
source:
binary: {}
type: Binary
strategy:
sourceStrategy:
from:
kind: ImageStreamTag
name: redhat-openjdk18-openshift:1.4
namespace: openshift
type: Source
triggers: []

View file

@ -4,7 +4,7 @@
<body>
<h2>Welcome to the Pet Clinic!</h2>
<h2 id="welcome">Welcome to the Pet Clinic!</h2>
<div class="row">
<div class="col-md-12">
<img class="img-responsive" src="../static/resources/images/pets.png" th:src="@{/resources/images/pets.png}"/>

View file

@ -0,0 +1,45 @@
package integration;
import static org.junit.Assert.assertEquals;
import java.net.MalformedURLException;
import org.junit.After;
import org.junit.Test;
import org.openqa.selenium.By;
import org.openqa.selenium.WebDriver;
public class MainPageIT {
private SeleniumConfig config;
private String url = "http://app-petclinic-dev.apps.cluster-ottawa-630b.ottawa-630b.example.opentlc.com/";
public MainPageIT() throws MalformedURLException {
config = new SeleniumConfig();
}
public String getTitle() {
return this.config.getDriver().getTitle();
}
@After
public void closeConnection() {
config.getDriver().quit();
}
@Test
public void googleTitleIT() {
WebDriver driver = config.getDriver();
driver.get(url);
assertEquals("Title not as expected: ", "PetClinic :: a Spring Framework demonstration", getTitle());
// Save the random value from the page.
String welcomeText = driver.findElement(By.id("welcome")).getText();
// Reload the page and get a new random value.
driver.get(url);
String value2 = driver.findElement(By.id("random-value")).getText();
// Values should not be the same.
assertEquals("Wrong welcome text.", "Welcome to the Pet Clinic!", welcomeText);
System.out.println("Text extracted: " + welcomeText);
}
}

View file

@ -0,0 +1,26 @@
package integration;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.concurrent.TimeUnit;
import org.openqa.selenium.Capabilities;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxOptions;
import org.openqa.selenium.remote.RemoteWebDriver;
public class SeleniumConfig {
private WebDriver driver;
public SeleniumConfig() throws MalformedURLException {
Capabilities capabilities = new FirefoxOptions();
driver = new RemoteWebDriver(
new URL("http://selenium-hub-cicd.apps.cluster-ottawa-630b.ottawa-630b.example.opentlc.com/wd/hub"),
capabilities);
driver.manage().timeouts().implicitlyWait(5, TimeUnit.SECONDS);
}
public WebDriver getDriver() {
return driver;
}
}