Commit dbf762f1 authored by Jérome Perrin's avatar Jérome Perrin

software/slapos-sr-testing: generate an environment script

Using an script to set the environment is easier to use, but the main
reason is that if we want to be able to use shared part from outer
slapos (like when using in theia or slaprunner), the working directory
for test must be contained in the instance directory of the outer
slapos, so that when we run slapos node prune in the outer slapos this
command can see that shared parts are used.
parent 482f5673
Pipeline #10834 failed with stage
...@@ -16,40 +16,36 @@ slaprunner to develop a slapos profile, in the example `helloworld`, make ...@@ -16,40 +16,36 @@ slaprunner to develop a slapos profile, in the example `helloworld`, make
changes to the code, run tests and publish changes. changes to the code, run tests and publish changes.
```bash ```bash
# install this software release # install this software release and request an instance
SR=https://lab.nexedi.com/nexedi/slapos/raw/1.0/software/slapos-sr-testing/software.cfg SR=https://lab.nexedi.com/nexedi/slapos/raw/1.0/software/slapos-sr-testing/software.cfg
COMP=slaprunner COMP=slaprunner # or "local" if using theia
INSTANCE_NAME=$COMP INSTANCE_NAME=$COMP
slapos supply $SR $COMP slapos supply $SR $COMP
slapos node software slapos node software
slapos request --node=node=$COMP $INSTANCE_NAME $SR slapos request --node=computer_guid=$COMP $INSTANCE_NAME $SR
slapos node instance slapos node instance
# note the `environment-script` published value
slapos request --node=computer_guid=$COMP $INSTANCE_NAME $SR
# and load this script to set environment variables
source ( environment-script from step above )
# Clone a working copy somewhere # Clone a working copy somewhere
cd ~/srv/runner/project/ cd ~/srv/runner/project/
git clone https://lab.nexedi.com/nexedi/slapos.git slapos_work git clone https://lab.nexedi.com/nexedi/slapos.git slapos_work
# Create a directory to hold the slapos test environment
SLAPOS_TEST_WORKING_DIR=~/tmp/slapos/
mkdir -p $SLAPOS_TEST_WORKING_DIR
# change directory to the directory containing test for this software # change directory to the directory containing test for this software
cd ~/srv/runner/project/slapos_work/software/helloworld/test/ cd ~/srv/runner/project/slapos_work/software/helloworld/test/
# run tests, using bundled python intepreter with pre-installed eggs dependencies. # run test (with debugging features activated)
SLAPOS_TEST_IPV6=::1 \ SLAPOS_TEST_DEBUG= 1 python_for_test setup.py test
SLAPOS_TEST_IPV4=127.0.0.1 \
SLAPOS_TEST_WORKING_DIR=$SLAPOS_TEST_WORKING_DIR \
SLAPOS_TEST_SHARED_PART_LIST=/opt/slapos/shared/:~/srv/runner/shared \
SLAPOS_TEST_VERBOSE=1 \
SLAPOS_TEST_DEBUG=1 \
~/srv/runner/instance/slappart0/software_release/bin/python_for_test setup.py test
``` ```
## Environment variables ## Environment variables
The `environment-script` set all variabels except `SLAPOS_TEST_DEBUG` and `SLAPOS_TEST_VERBOSE` for you, but for reference, here is the list of variables which control the test runner:
| Variable | Description | | Variable | Description |
| --- | --- | | --- | --- |
| `SLAPOS_TEST_IPV6` | ipv6 used by this instance. Usually you want to use a global address here to be able to connect to this instance. | | `SLAPOS_TEST_IPV6` | ipv6 used by this instance. Usually you want to use a global address here to be able to connect to this instance. |
...@@ -82,4 +78,7 @@ To use a development version of `slapos.cookbook` on test nodes, you can try usi ...@@ -82,4 +78,7 @@ To use a development version of `slapos.cookbook` on test nodes, you can try usi
### Test pass locally but fail on test nodes, what can I do ? ### Test pass locally but fail on test nodes, what can I do ?
At the end of the test, a snapshot of the slapos instances is created. Sometimes examining the log files can help understanding what went wrong. At the end of the test, a snapshot of the slapos instances is created. Sometimes examining the log files can help understanding what went wrong.
\ No newline at end of file
Most of the time, problems are because on test nodes paths are very long. One advanced technique to reproduce the problem in your development environment is to set `SLAPOS_TEST_WORKING_DIR` environment variable to a path with the same length as the ones on test nodes.
One way to make instances uses a slightly shorter path is to define `__partition_reference__` class attribute, so that the instances uses this as prefix instead of the class name.
...@@ -15,4 +15,4 @@ ...@@ -15,4 +15,4 @@
[template] [template]
filename = instance.cfg filename = instance.cfg
md5sum = 298bac4a631de3b30593b9a1dcf63e1c md5sum = 25a4d7e438402d992edadf9339faf557
[buildout] [buildout]
parts = parts =
slapos-test-runner slapos-test-runner
publish
eggs-directory = {{ buildout['eggs-directory'] }} eggs-directory = {{ buildout['eggs-directory'] }}
develop-eggs-directory = {{ buildout['develop-eggs-directory'] }} develop-eggs-directory = {{ buildout['develop-eggs-directory'] }}
...@@ -26,6 +27,7 @@ repository = {{ slapos_location }} ...@@ -26,6 +27,7 @@ repository = {{ slapos_location }}
recipe = slapos.cookbook:mkdirectory recipe = slapos.cookbook:mkdirectory
bin = ${buildout:directory}/bin bin = ${buildout:directory}/bin
working-dir = ${buildout:directory}/tmp working-dir = ${buildout:directory}/tmp
etc = ${buildout:directory}/etc
[slapos-test-runner] [slapos-test-runner]
recipe = slapos.cookbook:wrapper recipe = slapos.cookbook:wrapper
...@@ -36,7 +38,36 @@ command-line = ...@@ -36,7 +38,36 @@ command-line =
--source_code_path_list={{ ','.join(tests.splitlines()) }} --source_code_path_list={{ ','.join(tests.splitlines()) }}
environment = environment =
PATH={{ buildout['bin-directory'] }}:{{ curl_location }}/bin/:/usr/bin/:/bin PATH=${slapos-test-runner-environment:PATH}
SLAPOS_TEST_IPV4=${slap-configuration:ipv4-random} SLAPOS_TEST_IPV4=${slapos-test-runner-environment:SLAPOS_TEST_IPV4}
SLAPOS_TEST_IPV6=${slap-configuration:ipv6-random} SLAPOS_TEST_IPV6=${slapos-test-runner-environment:SLAPOS_TEST_IPV6}
SLAPOS_TEST_WORKING_DIR=${directory:working-dir} SLAPOS_TEST_WORKING_DIR=${slapos-test-runner-environment:SLAPOS_TEST_WORKING_DIR}
[slapos-test-runner-environment]
PATH = {{ buildout['bin-directory'] }}:{{ curl_location }}/bin/:/usr/bin/:/bin
SLAPOS_TEST_IPV4 = ${slap-configuration:ipv4-random}
SLAPOS_TEST_IPV6 = ${slap-configuration:ipv6-random}
SLAPOS_TEST_WORKING_DIR = ${directory:working-dir}
[slapos-local-development-environment.sh]
recipe = slapos.recipe.template:jinja2
rendered = ${directory:etc}/${:_buildout_section_name_}
template = inline:
export PATH=${slapos-test-runner-environment:PATH}:$PATH
export SLAPOS_TEST_IPV4=${slapos-test-runner-environment:SLAPOS_TEST_IPV4}
export SLAPOS_TEST_IPV6=${slapos-test-runner-environment:SLAPOS_TEST_IPV6}
export SLAPOS_TEST_WORKING_DIR=${slapos-test-runner-environment:SLAPOS_TEST_WORKING_DIR}
{% set shared_part_list = [] %}
{% for shared_part in buildout['shared-part-list'].splitlines() -%}
{% do shared_part_list.append(shared_part) %}
{%- endfor %}
export SLAPOS_TEST_SHARED_PART_LIST={{ os.pathsep.join(shared_part_list) }}
echo "Environment loaded."
echo "To work on a test, execute:"
echo " SLAPOS_TEST_DEBUG=1 {{ interpreter }} setup.py test"
echo "from test folder"
echo
[publish]
recipe = slapos.cookbook:publish
environment-script = ${slapos-local-development-environment.sh:rendered}
...@@ -19,6 +19,8 @@ parts = ...@@ -19,6 +19,8 @@ parts =
slapos-cookbook slapos-cookbook
template template
shared-part-list =
[setup-develop-egg] [setup-develop-egg]
recipe = zc.recipe.egg:develop recipe = zc.recipe.egg:develop
...@@ -227,10 +229,12 @@ branch = master ...@@ -227,10 +229,12 @@ branch = master
[template] [template]
recipe = slapos.recipe.template:jinja2 recipe = slapos.recipe.template:jinja2
template = ${:_profile_base_location_}/${:filename} template = ${:_profile_base_location_}/${:filename}
extensions = jinja2.ext.do
rendered = ${buildout:directory}/template.cfg rendered = ${buildout:directory}/template.cfg
mode = 640 mode = 640
context = context =
section buildout buildout section buildout buildout
import os os
key git_location git:location key git_location git:location
key slapos_location slapos-repository:location key slapos_location slapos-repository:location
key interpreter eggs:interpreter key interpreter eggs:interpreter
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment