testlanceurrayons 0.0.1
Paquet permettant de tester votre projet de lanceur de rayons
License: MIT License
Requires Python: >=3.8

# Tester le projet lanceur de rayons

Projet lanceur de rayons des étudiants de DUT2, L3, M1 et M2 informatique, université d'artois.

Le projet est sous forme de module PyPI déployé dans un dépôt local.

# Utilisation

## Ajout du dépôt PyPI local

Il existe plusieurs possibilités pour ajouter un dépôt PyPI dans votre environnement de travail. Pour cela, vous devez créer un fichier **pip.conf** parmi l'un des répertoires de votre choix comme indiqué par la commande suivante

```sh
pip config list -v
```

### Exemple

```sh
(venv) kemgue@ordi:~/Codes/tmp/codelanceurrayonspython-f(main)$ nano venv/pip.conf
(venv) kemgue@ordi:~/Codes/tmp/codelanceurrayonspython-f(main)$ pip config list -v
For variant 'global', will try loading '/etc/xdg/pip/pip.conf'
For variant 'global', will try loading '/etc/pip.conf'
For variant 'user', will try loading '/home/kemgue/.pip/pip.conf'
For variant 'user', will try loading '/home/kemgue/.config/pip/pip.conf'
For variant 'site', will try loading '/home/kemgue/Codes/tmp/codelanceurrayonspython/venv/pip.conf'
```

Dans mon projet, j'ai créé et chargé un environnement virtuel python avec les commandes suivantes

```sh
kemgue@ordi:~/Codes/tmp/codelanceurrayonspython-f(main)$ python -m venv venv
kemgue@ordi:~/Codes/tmp/codelanceurrayonspython-f(main)$ source venv/bin/activate
(venv) kemgue@ordi:~/Codes/tmp/codelanceurrayonspython-f(main)$
```

J'ai ensuite créé le fichier de configuration **pip.conf** dans mon environnement virtuel

```sh
kemgue@ordi:~/Codes/tmp/codelanceurrayonspython-f(main)$ nano venv/pip.conf
```

Ajoutez dans le fichier **pip.conf**, le texte suivant pour configurer le dépôt pypi local

```sh
[global]
index = http://nexus.cril-k8s.lan/repository/pypi-all/pypi
index-url = http://nexus.cril-k8s.lan/repository/pypi-all/simple
trusted-host = nexus.cril-k8s.lan
```

Vérifiez que votre dépôt a bien été pris en compte

```sh
(venv) kemgue@ordi:~/Codes/tmp/codelanceurrayonspython-f(main)$ pip config list -v
For variant 'global', will try loading '/etc/xdg/pip/pip.conf'
For variant 'global', will try loading '/etc/pip.conf'
For variant 'user', will try loading '/home/kemgue/.pip/pip.conf'
For variant 'user', will try loading '/home/kemgue/.config/pip/pip.conf'
For variant 'site', will try loading '/home/kemgue/Codes/tmp/codelanceurrayonspython/venv/pip.conf'
global.index='http://nexus.cril-k8s.lan/repository/pypi-all/pypi'
global.index-url='http://nexus.cril-k8s.lan/repository/pypi-all/simple'
global.trusted-host='nexus.cril-k8s.lan'

```

Pour installer la dépendance "testlanceurrayons" dans votre projet, soit vous l'ajoutez le fichier de dépendance des paquets python de votre projet, soit vous l'installez directement avec la commande

```sh
pip install testlanceurrayons
```

### Testez votre projet

A la racine de votre projet, créez un dossier tests et un dans ce dossier, ajoutez les fichiers \_ **init** \_.py (vide) et tests.py avec le code suivant

```py
from testlanceurrayons.test_compare import *

from testlanceurrayons.test_scene import *
from testlanceurrayons.test_triplets import *
from testlanceurrayons.test_images2d import *
from testlanceurrayons.test_images3d import *
```

### Lancez les tests

```py
(venv) kemgue@ordi:~/Codes/tmp/codelanceurrayonspython-f(main)$ pytest -s -v tests/tests.py
========================================================== test session starts ===========================================================
platform linux -- Python 3.10.15, pytest-8.3.2, pluggy-1.5.0 -- /home/kemgue/Codes/tmp/codelanceurrayonspython/venv/bin/python
cachedir: .pytest_cache
rootdir: /home/kemgue/Codes/tmp/codelanceurrayonspython-f
collected 25 items

tests/tests.py::test_meme_image PASSED
tests/tests.py::test_images_differentes PASSED
tests/tests.py::test_scene1 PASSED
tests/tests.py::test_scene2 PASSED
tests/tests.py::test_scene3 PASSED
tests/tests.py::test_scene4 PASSED
tests/tests.py::test_scene5 PASSED
tests/tests.py::test_add PASSED
tests/tests.py::test_mul PASSED
tests/tests.py::test_sub PASSED
tests/tests.py::test_dot PASSED
tests/tests.py::test_cross PASSED
tests/tests.py::test_image_generation[tp41-dir.test] PASSED
tests/tests.py::test_image_generation[tp45.test] PASSED
tests/tests.py::test_image_generation[tp44-a.test] PASSED
tests/tests.py::test_image_generation[scenetd43.test] PASSED
tests/tests.py::test_image_generation[tp44-d.test] PASSED
tests/tests.py::test_image_generation[tp44.test] PASSED
tests/tests.py::test_image_generation[tp44-c.test] PASSED
tests/tests.py::test_image_generation[tp42-dir.test] PASSED
tests/tests.py::test_image_generation[tp42-point.test] PASSED
tests/tests.py::test_image_generation[tp44-b.test] PASSED
tests/tests.py::test_image_generation[scenetd42.test] PASSED
tests/tests.py::test_image_generation[tp43.test] PASSED
tests/tests.py::test_image_generation[tp41-point.test] PASSED

========================================================== 25 passed in 18.26s ===========================================================
(venv) kemgue@ordi:~/Codes/tmp/codelanceurrayonspython-f(main)$

```

Les tests liés au projet seront ajoutés ici au fur et à mesure. À cet effet, vous devez mettre à jour régulièrement le module 'testlanceurrayons' dans votre projet avec la commande

```sh
(venv) kemgue@ordi:~/Codes/tmp/codelanceurrayonspython-f(main)$ pip install --upgrade testlanceurrayons
```

## Exécuter vos jobs CI sur le runner kubernetes

Si vous voulez faire tourner vos jobs CI sur le runner k8s (étiquette k8s), vous devez ajouter l'étape before_script de votre fichier .gitlab-ci.yml comme suit

```sh
before_script:
  - export NO_PROXY="localhost,.cril-k8s.lan"
  - mkdir -p ~/.pip
  - echo -e '[global]\nindex = http://nexus.cril-k8s.lan/repository/pypi-all/pypi\nindex-url = http://nexus.cril-k8s.lan/repository/pypi-all/simple\ntrusted-host = nexus.cril-k8s.lan\n' | tee -a ~/.pip/pip.conf
  - "pip install testlanceurrayons"
```

Pour exécuter les tests individuellement comme définis dans les étapes du fichier .gitlab-ci.yml, vous devez créer les fichiers suivants

- Fichier pour **comparateur**
  tests/test_compare.py

  ```py
  from testlanceurrayons.test_compare import *

  ```

- Fichier pour **vectests**
  tests/test_triplets.py

  ```py
  from testlanceurrayons.test_triplets import *

  ```

- Fichier pour **lecturescenes**
  tests/test_scene.py

  ```py
  from testlanceurrayons.test_scene import *
  ```

- Fichier pour **premieresimages**
  tests/test_images2d.py

  ```py
  from testlanceurrayons.test_images2d import *
  ```

- Fichier pour **imagescouleur**
  tests/test_images3d.py

  ```py
  from testlanceurrayons.test_images3d import *
  ```

Ainsi de suite ...

### Fichier .gitlab-ci.yml

```sh
variables:
  GIT_SUBMODULE_STRATEGY: recursive
  SONAR_SCANNER_OPTS: "-Dhttp.proxyHost=cache-etu.univ-artois.fr -Dhttp.proxyPort=3128 -Dhttps.proxyHost=cache-etu.univ-artois.fr -Dhttps.proxyPort=3128 -Dhttp.nonProxyHosts=localhost|.cril-k8s.lan"
  SONARINFO: "-Dsonar.host.url=http://sonarqube.univ-artois.fr/ -Dsonar.login=$SONARTOKEN -Dsonar.projectKey=tracer$CI_PROJECT_ID -Dsonar.projectName=Raytracer_by_$CI_PROJECT_NAMESPACE"


default:
  image: registry.cril-k8s.lan/docker-hub/leberre/pythonpytest:latest
  tags:
     - k8s

before_script:
  - export NO_PROXY="localhost,.cril-k8s.lan"
  - mkdir -p ~/.pip
  - echo -e '[global]\nindex = http://nexus.cril-k8s.lan/repository/pypi-all/pypi\nindex-url = http://nexus.cril-k8s.lan/repository/pypi-all/simple\ntrusted-host = nexus.cril-k8s.lan\n' | tee -a ~/.pip/pip.conf
  - "pip install testlanceurrayons"


stages:
  - build
  - initial
  - basic
  - realist
  - matrices
  - efficiency
  - coverage
  - qa
  - mystery

comparateur:
  stage: initial
  script: "pytest -s -v tests/test_compare.py"


vectests:
  stage: initial
  script: "pytest -s -v tests/test_triplets.py"

lecturescenes:
  stage: initial
  script: "pytest -s -v tests/test_scene.py"

premieresimages:
  stage: basic
  script: "pytest -s -v --no-cov tests/test_images2d.py"

imagescouleur:
  stage: basic
  allow_failure: true
  script: "pytest -s -v --no-cov tests/test_images3d.py"

# plansettriangles:
#   stage: basic
#   script: "cd tests; ./tests6.sh"

# lumiereindirecte:
#   stage: realist
#   script: "cd tests; ./tests7.sh"

# damiers:
#   stage: realist
#   script: "cd tests; ./tests10.sh"

# anticrenelage:
#   stage: realist
#   script: "cd tests; ./tests12.sh"

# transformations1:
#   stage: matrices
#   script: "cd tests; ./tests8.sh"
#   only:
#     - transformations

# transformations2:
#   stage: matrices
#   script: "cd tests; ./tests9.sh"
#   only:
#     - transformations

# transformations3:
#   stage: matrices
#   script: "cd tests; ./tests11.sh"
#   only:
#     - transformations

coverage:
  stage: coverage
  allow_failure: true
  script:
    - "pytest --junitxml=xunitreport.xml --cov projetl1 --cov-report=xml --cov-branch"
  artifacts:
    untracked: false
    access: all
    expire_in: "30 days"
    paths:
      - coverage.xml
      - xunitreport.xml

auditcode:
  before_script:
  - ''
  image: registry.cril-k8s.lan/docker-hub/sonarsource/sonar-scanner-cli
  stage: qa
  script:
    - "sonar-scanner -X $SONARINFO"


# imagesmystere:
#   stage: mystery
#   script: "cd tests; ./mysteres.sh"

```