Arquillian Cube Extension 1.0.0.Alpha16 Released

The Arquillian team is proud to announce the 1.0.0.Alpha16 release of the Arquillian Cube Extension component!

New version of Arquillian Cube 1.0.0.Alpha16 has been released with quite a bunch of enhancements and bugfixes.

What’s new

RestAssured configuration done via RequestSpecBuilder

In the previous version of Arquillian Cube, all parameters were set using internal RestAssured static method. This approach made test methods unable to be ran in parallel.
To address this issue we provide injection of RequestSpecBuilder class which lets you specify parameters such as host, port or HTTP headers on a test basis.

@ArquillianResource
RequestSpecBuilder requestSpecBuilder;

@Test
public void should_receive_ok_message() {
      RestAssured
          .given()
            .spec(requestSpecBuilder.build())
          .when()
            .get()
          .then()
            .assertThat().body("status", equalTo("OK"));
}

Arquillian Recorder/Reporter integration with Kubernetes

We have enhanced integration of Arquillian Recorder/Reporter in Cube by providing Kubernetes module. By using it you can easily get access to all configuration parameters used for test execution, as well as the session status which include Pods, Services, Replication Controllers, Namespaces, …

Kubernetes namespace prefix are fully configurable

namespace.prefix configuration parameter has been added to configure the namespace prefix.

Creates an AssertJ custom assertions for Docker

Now you can use AssertJ custom assertions for validating Docker containers.

@ArquillianResource
DockerClient docker;
assertThat(docker).hasImage("myimage");
assertThat(docker).container("myinstancename").hasExposedPorts(8080);
assertThat(docker).container("myinstancename").hasBindPorts(8080)

Creates stop/kill attribute

It may happen that certain docker image takes a lot of time to shutdown. For example shutting down selenium server in standalone debug mode might take ~10 seconds on the modern machine. These images are not really relavant for your test logic, they simply provide browsers to exercise our app against.

At the end of the tests, you spend 10 seconds waiting that this instance is stopped without a real need. We can simply kill such an image and save time during the build.

For this purpose boolean attribute killContainer in CUBE format has been added to set that an image should be killed. By default it is false which means that container is stopped normally.

Support for IP address management

Add support for adding IPAM options in network section in docker-compose files.

Add cleanBuildImage attribute

Configuration boolean cleanBuildImage parameter has been added so you can choose if all build images should be removed from docker host or not after finishing the build. By default build images are removed.

Reporting improvements

Arquillian Recorder Reporter now also displays information about containers like IO, Network or disk usage.

Port forwarding

Make possible to configure the port forwarder server bind address. This way you can run more than one instance of the port forwarder on the same machine.

UI videos in MP4 format

In the previous version of Cube, videos recorded during UI tests were stored in flv format. As Flash is slowly disappearing we decided to switch to format supported by HTML5 <video> tag.

What is Arquillian Cube Extension?

With Arquillian Cube you can control the lifecycle of Docker images as part of the test lifecyle, either automatically or manually. This gives you the chance to scale up from a integration/functional test level all the way up to the system test level.

Release details

Component Arquillian Cube Extension
Version 1.0.0.Alpha16 view tag
Release date 2017-01-10
Released by Alex Soto
Compiled against

Published artifacts org.arquillian.cube

  • org.arquillian.cube » arquillian-cube-api jar javadoc pom
  • org.arquillian.cube » arquillian-cube-spi jar javadoc pom
  • org.arquillian.cube » arquillian-cube-core jar javadoc pom
  • org.arquillian.cube » arquillian-cube-containerless jar javadoc pom
  • org.arquillian.cube » assertj-docker-java jar javadoc pom
  • org.arquillian.cube » arquillian-cube-docker jar javadoc pom
  • org.arquillian.cube » arquillian-cube-docker-drone jar javadoc pom
  • org.arquillian.cube » arquillian-cube-docker-recorder jar javadoc pom
  • org.arquillian.cube » arquillian-cube-docker-restassured jar javadoc pom
  • org.arquillian.cube » arquillian-cube-openshift jar javadoc pom
  • org.arquillian.cube » arquillian-cube-kubernetes-fabric8 jar javadoc pom
  • org.arquillian.cube » arquillian-cube-kubernetes jar javadoc pom
  • org.arquillian.cube » arquillian-cube-kubernetes-reporter jar javadoc pom
  • org.arquillian.cube » arquillian-cube-requirement jar javadoc pom

Release notes and resolved issues 30

Enhancement
Bug
Other
Docker

Thanks to the following list of contributors: Alex Soto, Dipak Pawar, Ioannis Canellos, Jonh Wendell, Filippe, EddĂș MelĂ©ndez Gonzales, Rob Cernich, Hemani, Bartosz Majsak

Arquillian Extension Jacoco 1.0.0.Alpha9 Released

The Arquillian team is proud to announce the 1.0.0.Alpha9 release of the Arquillian Extension Jacoco component!

Highlights in this release

Filtering improvements

We have fixed and extended filtering capabilities in JaCoCo extension. If you don’t specify any includes nor excludes JaCoCo will try to instrument every single class it can find on the classpath. This is not only time consuming but might lead to some issues.

At the end of the day most of the times you are not interested in coverage for external libraries. With simple configuration like the one below you can control classes and packages.

<?xml version="1.0" encoding="UTF-8"?>
<arquillian
  xmlns="http://jboss.org/schema/arquillian"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="
        http://jboss.org/schema/arquillian
        http://jboss.org/schema/arquillian/arquillian_1_0.xsd">

  <extension qualifier="jacoco">
    <property name="excludes">my.package.some.*</property>
    <property name="includes">my.package.some.include.*,fully.qualified.class.name.MyClass</property>
  </extension>
        
</arquillian>

In case of conflicting patterns in excludes and includes, excludes always wins.

Important change: Upgraded to Jacoco version 0.7.8

What is Arquillian?

Arquillian is open source software that empowers you to test JVM-based applications more effectively. Created to defend the software galaxy from bugs, Arquillian brings your test to the runtime so you can focus on testing your application's behavior rather than managing the runtime. Using Arquillian, you can develop a comprehensive suite of tests from the convenience of your IDE and run them in any IDE, build tool or continuous integration environment.

Release details

Component Arquillian Extension Jacoco
Version 1.0.0.Alpha9 view tag
Release date 2017-01-09
Released by Bartosz Majsak
Compiled against

Published artifacts org.jboss.arquillian.extension

  • org.jboss.arquillian.extension » arquillian-jacoco jar javadoc pom

Release notes and resolved issues 5

Feature Request
  • ARQ-1967 - Support 'alternative' deploy of ASM in Jacoco
  • ARQ-2054 - Update Dependencies
Bug
  • ARQ-1684 - Jacoco extension filters do not work as advertised
  • ARQ-1931 - Arquillian jacoco extension throws NullpointerException when using 'createFromZipFile'
  • ARQ-2069 - JaCoCo include/exclude configuration does not support multiline

Thanks to the following list of contributors: Bartosz Majsak, Hemani, Aslak Knutsen, Dipak Pawar, Andreas Weise

Arquillian Tomcat Container 1.0.0.CR9 Released

The Arquillian team is proud to announce the 1.0.0.CR9 release of the Arquillian Tomcat Container component!

What is Arquillian?

Arquillian is open source software that empowers you to test JVM-based applications more effectively. Created to defend the software galaxy from bugs, Arquillian brings your test to the runtime so you can focus on testing your application's behavior rather than managing the runtime. Using Arquillian, you can develop a comprehensive suite of tests from the convenience of your IDE and run them in any IDE, build tool or continuous integration environment.

Release details

Component Arquillian Tomcat Container
Modules
Version 1.0.0.CR9 view tag
Release date 2017-01-06
Released by Bartosz Majsak
Compiled against

Published artifacts org.jboss.arquillian.container

  • org.jboss.arquillian.container » arquillian-tomcat-common jar javadoc pom
  • org.jboss.arquillian.container » arquillian-tomcat-embedded-common jar javadoc pom
  • org.jboss.arquillian.container » arquillian-tomcat-embedded-6 jar javadoc pom
  • org.jboss.arquillian.container » arquillian-tomcat-embedded-7 jar javadoc pom
  • org.jboss.arquillian.container » arquillian-tomcat-embedded-8 jar javadoc pom
  • org.jboss.arquillian.container » arquillian-tomcat-managed-common jar javadoc pom
  • org.jboss.arquillian.container » arquillian-tomcat-managed-5.5 jar javadoc pom
  • org.jboss.arquillian.container » arquillian-tomcat-managed-6 jar javadoc pom
  • org.jboss.arquillian.container » arquillian-tomcat-managed-7 jar javadoc pom
  • org.jboss.arquillian.container » arquillian-tomcat-managed-8 jar javadoc pom
  • org.jboss.arquillian.container » arquillian-tomcat-remote-common jar javadoc pom
  • org.jboss.arquillian.container » arquillian-tomcat-remote-6 jar javadoc pom
  • org.jboss.arquillian.container » arquillian-tomcat-remote-7 jar javadoc pom

Thanks to the following list of contributors: Bartosz Majsak, Matous Jobanek

Arquillian Core 1.1.12.Final Released

The Arquillian team is proud to announce the 1.1.12.Final release of the Arquillian Core component!

Just before Christmas we have shipped new version of Arquillian Core. This is not a major release but besides typical dependency updates it comes with few a important improvements we wanted to share with you.

Highlights in this release

Improved support for injection in JUnit @Rules

In the previous version we provided initial support for injection in JUnit @Rules. It was limited to client side execution but now we support in-container part of test execution as well. This means you can have custom rules having access to injectable components when running in-container tests (both from your application as well as those provided by Arquillian).

If you want to see it in action, we created examples in the showcase project.

Synthetic bridge methods (JDK 8 issue)

Some of the extensions compiled using JDK 6 can manifest JDK 8 problem. This might result with ClassCastExceptions which might be very confusing for the user. We have provided fix for it in this release.

Combining multiple errors

When test fails with multiple errors (as it happens in Arquillian Algeron verification for instance) Arquillian will provide combined exception having all the faults captured.

What is Arquillian?

Arquillian is open source software that empowers you to test JVM-based applications more effectively. Created to defend the software galaxy from bugs, Arquillian brings your test to the runtime so you can focus on testing your application's behavior rather than managing the runtime. Using Arquillian, you can develop a comprehensive suite of tests from the convenience of your IDE and run them in any IDE, build tool or continuous integration environment.

Release details

Component Arquillian Core
Version 1.1.12.Final view tag
Release date 2016-12-22
Released by Bartosz Majsak
Compiled against

Published artifacts org.jboss.arquillian.core

  • org.jboss.arquillian.core » arquillian-core-api jar javadoc pom
  • org.jboss.arquillian.core » arquillian-core-spi jar javadoc pom
  • org.jboss.arquillian.core » arquillian-core-impl-base jar javadoc pom
  • org.jboss.arquillian.config » arquillian-config-api jar javadoc pom
  • org.jboss.arquillian.config » arquillian-config-spi jar javadoc pom
  • org.jboss.arquillian.config » arquillian-config-impl-base jar javadoc pom
  • org.jboss.arquillian.test » arquillian-test-api jar javadoc pom
  • org.jboss.arquillian.test » arquillian-test-spi jar javadoc pom
  • org.jboss.arquillian.test » arquillian-test-impl-base jar javadoc pom
  • org.jboss.arquillian.container » arquillian-container-spi jar javadoc pom
  • org.jboss.arquillian.container » arquillian-container-impl-base jar javadoc pom
  • org.jboss.arquillian.container » arquillian-container-test-api jar javadoc pom
  • org.jboss.arquillian.container » arquillian-container-test-spi jar javadoc pom
  • org.jboss.arquillian.container » arquillian-container-test-impl-base jar javadoc pom
  • org.jboss.arquillian.junit » arquillian-junit-core jar javadoc pom
  • org.jboss.arquillian.junit » arquillian-junit-standalone jar javadoc pom
  • org.jboss.arquillian.junit » arquillian-junit-container jar javadoc pom
  • org.jboss.arquillian.testng » arquillian-testng-core jar javadoc pom
  • org.jboss.arquillian.testng » arquillian-testng-standalone jar javadoc pom
  • org.jboss.arquillian.testng » arquillian-testng-container jar javadoc pom
  • org.jboss.arquillian.testenricher » arquillian-testenricher-cdi jar javadoc pom
  • org.jboss.arquillian.testenricher » arquillian-testenricher-ejb jar javadoc pom
  • org.jboss.arquillian.testenricher » arquillian-testenricher-resource jar javadoc pom
  • org.jboss.arquillian.testenricher » arquillian-testenricher-initialcontext jar javadoc pom
  • org.jboss.arquillian.protocol » arquillian-protocol-servlet jar javadoc pom
  • org.jboss.arquillian.protocol » arquillian-protocol-jmx jar javadoc pom
  • org.jboss.arquillian » arquillian-bom pom

Release notes and resolved issues 8

Component Upgrade
  • ARQ-2011 - Upgrade to ShrinkWrap Resolvers 2.2.2
  • ARQ-2058 - Update Arquillian-Core to use TestNG 6.9.10
Feature Request
  • ARQ-2065 - Combine multiple test results
Bug
  • ARQ-2012 - Warnings when test runs as client without @RunAsClient
  • ARQ-2034 - Test enrichment and JUnit @Rule do not harmonize
  • ARQ-2042 - Bridge methods treated as observer methods in JDK8
  • ARQ-2053 - Allow Arquillian Core to define a way to execute registration of extensions in order
  • ARQ-2068 - Hard to discover why an @Observer method is not being invoked

Thanks to the following list of contributors: Bartosz Majsak, Matous Jobanek, Aslak Knutsen, Alex Soto, Gil, Andreiserea, Jonh Wendell, George Gastaldi, Dipak Pawar

Arquillian Algeron Extension 1.0.0.Alpha5 Released

The Arquillian team is proud to announce the 1.0.0.Alpha5 release of the Arquillian Algeron Extension component!

Arquillian Pact has been rebranded to Arquillian Algeron. This is an extension for writing contract-driven tests.

Currently we are providing you seamless integration with well known Pact framework but more integrations will come in next releases.

What’s new

Arquillian Pact has been rebranded to Arquillian Algeron

Now Arquillian Pact is under the umbrella of Consumer Driven Contract project called Arquillian Algeron.

This rebranding has influenced the structure of Arquillian Pact. To migrate from Arquillian Pact to Arquillian Algeron Pact, you need will have to:

  • Artifact Id has changed from arquillian-pact-consumer-core and arquillian-pact-provider-core to arquillian-algeron-pact-consumer-core and arquillian-algeron-pact-provider-core.
  • Contract loaders has been renamed and relocated to a common place, so instead of @PactFolder now it is @ContractsFolder. In general all loaders annotations has been renamed by replacing the Pact element to Contracts.
  • Pact publisher is not configured anymore in pact-consumer extension but in algeron-consumer. You can read about it at Consumer Publisher section
  • Pact Loader has been renamed to Contracts Retriever.
  • Base package is not org.arquillian.pact anymore but org.arquillian.algeron.pact – this might be relevant if you have already started exploring SPIs.

Allow user to define states like Cucumber expressions

You can pass as state expressions following Cucumber approach, so for example you can pass next state in consumer:

public PactFragment createFragment(PactDslWithProvider builder) {
  builder.given("I have 36 cukes in my belly")
         ...
}

And you can get it on provider side using:

@State("I have (\\d+) cukes in my belly")
public void stateMethod(int numberOfCukes) {
  this.numberOfCukes = numberOfCukes;
}

You can read more about this feature at Pact States section

AssertJ integration

A custom assertj assertion has been created so asserting contracts using Target in provider side could be done in a readable way instead of calling a method.

@ArquillianResource
URL webapp;

@ArquillianResource
Target target;

@Test
public void should_provide_valid_answers() {
  assertThat(target).withUrl(webapp).satisfiesContract();
}

You can read more about this feature at AssertJ Integration section

Retrieving/Loading contracts can be configured using annotations and in arquillian.xml

Consumer can publish contracts when the contract is generated. Its configuration parameters are set in arquillian.xml. But on the provider side, contracts used for verification were configured using annotations.

To make things more standard, now retrievers can be configured using annotations or as publishers in arquillian.xml too. For example:

<extension qualifier="algeron-provider">
  <property name="retrieverConfiguration">
          provider: folder
          contractsFolder: <folder where contracts are stored>
    </property>
</extension>

You can read more about this feature at Retrievers as Configuration section

Integration between Pact Provider and Arquillian Reporter

Now if you have Arquillian Recorder dependency on your classpath and you set @VerificationReports to use recorder as reporting format, the result of the verification of the provider is reported in Arquillian Recorder too.

You can read more about this feature at Arquillian Recorder Reporter integration

PactVerification value is not mandatory

When you want to write a consumer test you need to specify that the method tests a consumer contract by using @PactVerification annotation and setting which provider you are verifying. In case of using @Pact annotation on the class level, this information can be redundant (the value of the annotation). For example you can do:

@RunWith(Arquillian.class)
@Pact(provider="test_provider", consumer="test_consumer")
public class ClientGatewayTest {

  @Test
  @PactVerification
  public void should_return_message() throws IOException {
    assertThat(clientGateway.getMessage(), is("{\"responsetest\": true, \"name\": \"harry\"}"));
  }
}

Notice that now you don’t need to set the provider in @PactVerification annotation since it is retrieved from class level.

Bug fixing

Test does not fail when contract is not verified

If multiple interactions are validated in provider side within same test, Arquillian takes only in consideration the first interaction result as final test result. To fix this a new Arquillian Core has been released (1.1.12). We encourage all users to use Arquillian Core 1.1.12 as the minimum version to avoid this problem. Notice that this also applies to previous versions of Arquillian Pact/Algeron.

What is Arquillian?

Arquillian is open source software that empowers you to test JVM-based applications more effectively. Created to defend the software galaxy from bugs, Arquillian brings your test to the runtime so you can focus on testing your application's behavior rather than managing the runtime. Using Arquillian, you can develop a comprehensive suite of tests from the convenience of your IDE and run them in any IDE, build tool or continuous integration environment.

Release details

Component Arquillian Algeron Extension
Version 1.0.0.Alpha5 view tag
Release date 2017-01-05
Released by Alex Soto
Compiled against

Published artifacts org.arquillian.algeron

  • org.arquillian.algeron » arquillian-algeron-pact-consumer-api jar javadoc pom
  • org.arquillian.algeron » arquillian-algeron-pact-consumer-core jar javadoc pom
  • org.arquillian.algeron » arquillian-algeron-pact-consumer-spi jar javadoc pom
  • org.arquillian.algeron » arquillian-algeron-pact-provider-api jar javadoc pom
  • org.arquillian.algeron » arquillian-algeron-pact-provider-core jar javadoc pom
  • org.arquillian.algeron » arquillian-algeron-pact-provider-spi jar javadoc pom
  • org.arquillian.algeron » arquillian-algeron-pact-provider-pact-broker-loader jar javadoc pom
  • org.arquillian.algeron » arquillian-algeron-pact-provider-assertj jar javadoc pom
  • org.arquillian.algeron » arquillian-algeron-git jar javadoc pom
  • org.arquillian.algeron » arquillian-algeron-configuration jar javadoc pom
  • org.arquillian.algeron » arquillian-algeron-consumer-spi jar javadoc pom
  • org.arquillian.algeron » arquillian-algeron-consumer-core jar javadoc pom
  • org.arquillian.algeron » arquillian-algeron-consumer-git-publisher jar javadoc pom
  • org.arquillian.algeron » arquillian-algeron-provider-spi jar javadoc pom
  • org.arquillian.algeron » arquillian-algeron-provider-api jar javadoc pom
  • org.arquillian.algeron » arquillian-algeron-provider-core jar javadoc pom
  • org.arquillian.algeron » arquillian-algeron-provider-git-retriever jar javadoc pom
  • org.arquillian.algeron » arquillian-algeron-provider-maven-retriever jar javadoc pom

Release notes and resolved issues 6

Enhancement
Bug

Thanks to the following list of contributors: Alex Soto, Bartosz Majsak