# Clixon example test container

This directory show how to build a "monolithic" clixon docker
container exporting port 80 and contains the example application with
both restconf, netconf, cli and backend. It also includes packages to be able to run the [Clixon tests](../../test).

Note that restconf capability depends on how clixon was configured using the `--with-restconf` option.

The directory contains the following files:
  - cleanup.sh       Kill containers
  - Dockerfile       Docker build instructions without restconf
  - Dockerfile.fcgi  Docker build instructions with nginx/fcgi restconf (this is default)
  - Dockerfile.native Docker build instructions with native restconf
  - Makefile.in      "make docker" builds the container
  - README.md        This file
  - start.sh         Start containers
  - startsystem.sh   Internal start script copied to inside the container (dont run from shell).
  - startsystem_fcgi.sh  Variant for nginx/fcgi (default)
  - startsystem_native.sh Variant for native restconf

How to run the tests:
```
  $ make test
```

How to build and start the container (called clixon-test):
```
  $ make docker
  $ ./start.sh 
```

The start.sh has a number of environment variables to alter the default behaviour:
* PORT - Nginx exposes port 80 per default. Set `PORT=8080` for example to access restconf using 8080.
* DBG - Set debug. The clixon_backend will be shown on docker logs.
* CONFIG - Set XML configuration file other than the default example.
* STORE - Set running datastore content to other than default.

Example:
```
  $ DBG=1 PORT=8080 ./start.sh
```

Once running you can access it in different ways as follows:
As CLI:
```
  $ sudo docker exec -it clixon-test clixon_cli
```
As netconf via stdin/stdout:
```
  $ sudo docker exec -it clixon-test clixon_netconf -f /usr/local/etc/example.xml
```
As restconf using curl on exposed port 80:
```
  $ curl -X GET http://localhost/restconf
  {
    "ietf-restconf:restconf": {
      "data": {},
      "operations": {},
      "yang-library-version": "2019-01-04"
    }
  }
```
Or run tests:
```
  $ sudo docker exec -it clixon-test bash -c 'cd /usr/local/bin/test && ./all.sh'
```

To check status and then kill it:
```
  $ sudo docker ps --all
  $ ./cleanup.sh 
```

You trigger the test scripts inside the container using `make test`.

## Changing code

If you want to edit clixon code so it runs in the container?
You either:
  1. "persistent": make your changes in the actual clixon code and commit; make clean to remove the local clone;  make test again
  2. "volatile" edit the local clone, (in the subdir); `make test`.
