--- title: "Traefik Mesh Building and Testing" description: "This documentation article explains how you can build your own Traefik Mesh binary from the sources." --- # Building and Testing So you want to build your own Traefik Mesh binary from the sources? Let's see how. ## Building To build Traefik Mesh from the sources you need either [Docker](https://github.com/docker/docker) and [make](https://www.gnu.org/software/make/manual/make.html), or [Go](https://github.com/golang/go). ### With `Docker` and `make` Traefik Mesh can be built from the sources by using the `make` command. This will create a binary for the Linux platform in the `dist` directory and a Docker image: ```bash $ make #[...] Successfully tagged traefik/mesh:latest docker run --name=build -t "traefik/mesh:latest" version version: version : d6947526 commit : d6947526 build date : 2021-12-28_03:19:22PM go version : go1.17.5 go compiler : gc platform : linux/amd64 #[...] $ ls dist/ traefik-mesh ``` !!! Note The default `make` target invokes the `clean`, `check`, `test` and `build` targets. ### With `Go` Requirements: - `Go` v1.17+ - Environment variable `GO111MODULE=on` One your Go environment is set up, you can build Traefik Mesh from the sources by using the `go build` command. The Go compiler will build an executable for your platform. ```bash $ go build -o dist/traefik-mesh ./cmd/mesh $ ./dist/traefik-mesh version version: version : dev commit : I don't remember exactly build date : I don't remember exactly go version : go1.17.5 go compiler : gc platform : linux/amd64 ``` ## Testing ### With `Docker` and `make` Run unit tests by using the `test` target: ```bash $ make test docker build --tag "traefik/mesh:test" --target maker --build-arg="MAKE_TARGET=local-test" /home/user/traefik-mesh/ #[...] --- PASS: TestBuildConfiguration (0.00s) --- PASS: TestBuildConfiguration/simple_configuration_build_with_HTTP_service (0.20s) PASS coverage: 69.7% of statements ok github.com/traefik/mesh/v2/pkg/providers/smi 1.982s coverage: 69.7% of statements ? github.com/traefik/mesh/v2/pkg/signals [no test files] Removing intermediate container 4e887c16ddee ---> 75d44229a46e Successfully built 75d44229a46e Successfully tagged traefik/mesh:test ``` Run the integration tests by using the `test-integration` target. For development purposes, you can specify which tests to run by using the `TESTFLAGS` environment variable (only works with the `test-integration` target): ```bash # Run every tests in the MyTest suite $ TESTFLAGS="-check.f MyTestSuite" make test-integration # Run the test "MyTest" in the MyTest suite $ TESTFLAGS="-check.f MyTestSuite.MyTest" make test-integration # Run every tests starting with "My", in the MyTest suite $ TESTFLAGS="-check.f MyTestSuite.My" make test-integration # Run every tests ending with "Test", in the MyTest suite $ TESTFLAGS="-check.f MyTestSuite.*Test" make test-integration ``` More on [https://labix.org/gocheck](https://labix.org/gocheck). ### With `Go` Run the unit tests by using the `go test` command: ```bash $ go test -v ./... #[...] === RUN TestGroupTrafficTargetsByDestination --- PASS: TestGroupTrafficTargetsByDestination (0.20s) === RUN TestBuildConfiguration === RUN TestBuildConfiguration/simple_configuration_build_with_HTTP_service === PAUSE TestBuildConfiguration/simple_configuration_build_with_HTTP_service === CONT TestBuildConfiguration/simple_configuration_build_with_HTTP_service time="2020-04-09T16:09:16+04:00" level=debug msg="Found traffictargets for service default/demo-service: [0xc0009004e0]" time="2020-04-09T16:09:16+04:00" level=debug msg="Found applicable traffictargets for service default/demo-service: [0xc0009004e0]" time="2020-04-09T16:09:16+04:00" level=debug msg="Found grouped traffictargets for service default/demo-service: map[{name:api-service namespace:default port:}:[0xc000900820]]" time="2020-04-09T16:09:16+04:00" level=debug msg="No TrafficSplits in namespace: default" time="2020-04-09T16:09:16+04:00" level=debug msg="Found trafficsplits for service default/demo-service: []" --- PASS: TestBuildConfiguration (0.00s) --- PASS: TestBuildConfiguration/simple_configuration_build_with_HTTP_service (0.21s) PASS ok github.com/traefik/mesh/v2/pkg/providers/smi 3.634s ? github.com/traefik/mesh/v2/pkg/signals [no test files] ``` Run the integration tests in the `integration` directory by using the `go test ./integration -integration` command: ```bash $ go test -v ./integration -integration -check.f CoreDNSSuite #[...] OK: 2 passed --- PASS: Test (161.20s) PASS ok github.com/traefik/mesh/v2/integration 162.695s ``` !!! Important Before running the integration tests, build the Traefik Mesh Docker image. Check out the [Building](#building) section for more details.