Java library and JUnit rule for running Varnish Cache daemon.
- varnish-exec-core - Core module
- varnish-exec-junit - Integration with the JUnit
- varnish-exec-spring - Integration with the Spring TestContext Framework
- JDK 8
- Varnish Cache 3.0, 4.0 or 5.0
Varnish Exec is available in Maven Central.
Apache Maven:
<dependencies>
<dependency>
<groupId>com.github.platan</groupId>
<artifactId>varnish-exec-(core|junit|spring)</artifactId>
<version>0.2.1</version>
<scope>test</scope>
</dependency>
</dependencies>
Gradle:
repositories {
mavenCentral()
}
dependencies {
testCompile 'com.github.platan:varnish-exec-(core|junit|spring):0.2.1'
}
In order to install it in your local Maven repository run:
./gradlew install
JUnit test using rule:
import com.github.platan.varnishexec.VarnishCommand;
import com.github.platan.varnishexec.junit.VarnishResource;
import org.junit.ClassRule;
...
public class MyTest {
private static final VarnishCommand VARNISH_COMMAND = VarnishCommand.newBuilder()
.withConfigFile("./src/test/etc/varnish/default.vcl").build();
@ClassRule
public static VarnishResource varnishResource = VarnishResource.build(VARNISH_COMMAND);
@Test
public void testSomethingWithRunningVarnish() throws Exception {
int port = varnishResource.getPort();
...
}
}
In the above example we use a ClassRule. Varnish Cache daemon starts once before all tests run and shutdowns after they are finished.
Another example using core varnish-exec API:
import org.junit.AfterClass;
import org.junit.BeforeClass;
import com.github.platan.varnishexec.VarnishCommand;
import com.github.platan.varnishexec.VarnishExecs;
import com.github.platan.varnishexec.VarnishProcess;
...
public class MyTest {
private static VarnishProcess varnishProcess;
@BeforeClass
public static void setUpClass() {
VarnishCommand varnishCommand = VarnishCommand.newBuilder()
.withConfigFile("./src/test/etc/varnish/default.vcl").build();
varnishProcess = VarnishExecs.start(varnishCommand);
}
@AfterClass
public static void tearDownClass() {
varnishProcess.kill();
}
@Test
public void testSomethingWithRunningVarnish() throws Exception {
int port = varnishProcess.getPort();
...
}
}
An example using the VarnishTest
annotation integrating varnish-exec with the Spring TestContext Framework:
import com.github.platan.varnishexec.spring.VarnishTest;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@VarnishTest(configFile = "./src/test/etc/varnish/default.vcl")
public class MyTest {
@Value("${local.varnish.port}")
private String varnishPort;
@Test
public void testSomethingWithRunningVarnish() {
...
}
}
The above examples will start a new process with default values:
varnishd -a localhost:10080 -F -f ./src/test/etc/varnish/default.vcl -n /tmp
Examples can be found on varnish-exec-example.
Use VarnishCommand
to override default arguments. Varnish daemon command can be configured by varnishdCommand
parameter.
All supported varnishd
options:
option | varnishd parameter | parameter | default value |
---|---|---|---|
listening address | -a | address | localhost:10080 |
backend server | -b | backend | |
VCL configuration file | -f | configFile | |
management interface address | -T | managementAddress | |
instance name | -n | name | /tmp |
storage backend | -s | storage |
Build a command:
VarnishCommand command = VarnishCommand.newBuilder()
.withAddress("localhost", 80)
.withConfigFile("service.vcl")
.withManagementAddress("localhost", 10000)
.withName("service")
.withStorage("malloc,1G")
.withVarnishdCommand("/usr/sbin/varnishd").build();
Then pass it to VarnishResource
:
VarnishResource varnishResource = VarnishResource.build(command);
Or to VarnishExecs#start
:
VarnishProcess varnishProcess = VarnishExecs.start(command);
The VarnishTest
class allows to define all options listed above. Furthermore, this class:
- can set a random name and a random port
- replaces
@local.port@
with a value of an application port (local.server.port
) in a copy of VCL configuration file - sets
local.varnish.port
property with a value of a varnish port
Check a documentation for more information.
- a random port is selected from the range 1024 - 65535
- (new feature) added varnish-exec-spring module providing integration with the Spring TestContext Framework
- Initial release
This project is licensed under the MIT license.