Browse Source

test/scrippy_core (#4)

doc: Pylint score badge

test: All services up and running

test: import all scrippy modules

Co-authored-by: mco-system <michael.costa@mcos.nc>
Reviewed-on: https://git.mcos.nc/scrippy/scrippy-core/pulls/4
Co-Authored-By: Michaël Costa <michael.costa@mcos.nc>
Co-Committed-By: Michaël Costa <michael.costa@mcos.nc>
pull/6/head
Michaël Costa 5 months ago
parent
commit
cb5799b2b2
11 changed files with 25915 additions and 27 deletions
  1. +51
    -5
      .drone.yml
  2. +10
    -10
      README.md
  3. +25683
    -0
      logging
  4. +1
    -1
      scrippy_core/__init__.py
  5. +5
    -7
      scrippy_core/context/__init__.py
  6. +1
    -0
      scrippy_core/error_handler/__init__.py
  7. +2
    -0
      setup.cfg
  8. +8
    -0
      tests/scrippy/scrippy.yml
  9. +8
    -0
      tests/scrippy/setup.py
  10. +35
    -0
      tests/test_scrippy_core.conf
  11. +111
    -4
      tests/test_scrippy_core.py

+ 51
- 5
.drone.yml View File

@ -7,10 +7,25 @@ name: Scrippy/scrippy-core
steps:
- name: Test
image: python
environment:
pip_user:
from_secret: pip_user
pip_password:
from_secret: pip_password
commands:
- python -m pip install pip --upgrade
- python -m pip install .[dev]
- python3 -m pytest --cov=scrippy_core --junitxml=./junit_report.xml
- mkdir /etc/scrippy
- python3 -m pip install pip --upgrade
- python3 -m pip install .[dev]
- pip install -i https://$${pip_user}:$${pip_password}@pip.mcos.nc/simple/ --upgrade scrippy-template scrippy-remote scrippy-db scrippy-git scrippy-api scrippy-mail
- cp tests/scrippy/scrippy.yml /etc/scrippy/
- python3 tests/scrippy/setup.py
- cp tests/test_scrippy_core.conf /etc/scrippy/conf/
# - python3 "$(pwd)"/tests/test_scrippy_core.py
# On teste le nombre de lignes dans le dernier log
# Le nombre de lignes à retrouver doit être adapté à chaque modification du script du test
# - test $(python3 "$(pwd)"/tests/test_scrippy_core.py --log | grep -cE "\[test_scrippy_core_[0-9]+\.[0-9]+_[0-9]+\]") -eq 3
# On teste le nombre d'exécutions enregistrées dans l'historique
# - test $(python3 "$(pwd)"/tests/test_scrippy_core.py --hist | grep -cE "[0-9]+\.[0-9]+_[0-9]+") -eq 1
when:
event:
exclude:
@ -32,8 +47,9 @@ steps:
- git push --set-upstream origin master
- bump2version patch
- VERSION=$(grep ^current_version ./.bumpversion.cfg | cut -d\ -f3);
- SCORE=$(pylint ./scrippy_core/* --exit-zero --confidence=HIGH -f parseable | tail -n2 | head -n1 | cut -d\ -f7)
- auto-changelog -v $${VERSION} --starting-commit 6519ff5f376b493afe086fe078745d9aa3cf49fe -d 'Fichier généré automatiquement par auto-changelog' --diff-url https://git.mcos.nc/scrippy/scrippy-core/compare/{previous}...{current}
- sed -i "1c \![version](https://img.shields.io/static/v1?label=version&color=informational&message=$${VERSION}) $${badge_url}" README.md
- sed -i "1c \![version](https://img.shields.io/static/v1?label=version&color=informational&message=$${VERSION}) ![pylint](https://img.shields.io/static/v1?label=pylint&color=informational&message=$${SCORE}) $${badge_url}" README.md
- git add setup.cfg .bumpversion.cfg CHANGELOG.md README.md
- git commit -m 'Increment version and update changelog [CI SKIP]'
- pypirc -s local -u $${pip_user} -p $${pip_password} -r https://pip.mcos.nc
@ -63,8 +79,38 @@ steps:
exclude:
- tag
- pull_request
services:
- name: mailer
pull: never
image: mailer:latest
ports:
- 2500
- name: gitolite
pull: never
image: gitolite:latest
ports:
- 2201
- name: postgres
image: postgres:11.1-alpine
ports:
- 5432
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: scrippy
- name: api
pull: never
image: gunicorn:latest
ports:
- 8080
- name: remote
pull: never
image: sshd:latest
ports:
- 2200
---
kind: signature
hmac: 00caba342187621b7462f7bb735dce97a1f0e0dad5b7643bd6df0bb3c2db93d7
hmac: f06ba2d572caf27394fc8d0c45481d20668c6640fad3bdd6bb50ed4ba0438954
...

+ 10
- 10
README.md View File

@ -78,13 +78,13 @@ Modèle de fichier de configuration de l'environnement d'exécution _Scrippy_:
```yaml
env:
logdir: /opt/expl/log
histdir: /opt/expl/hist
reportdir: /opt/expl/cpt
tmpdir: /opt/expl/tmp
datadir: /opt/expl/dat
templatedir: /opt/expl/mod
confdir: /opt/expl/conf
logdir: /var/log/scrippy
histdir: /var/lib/scrippy/hist
reportdir: /var/lib/scrippy/reports
tmpdir: /var/tmp/scrippy
datadir: /var/lib/scrippy/data
templatedir: /var/lib/scrippy/templates
confdir: /etc/scrippy/conf
```
2. Création des répertoires définis dans le fichier de configuration `/etc/scrippy/scrippy.yml` par l'utilisateur _root_ (ou via `sudo`)
@ -95,11 +95,11 @@ Script python de création des répertoires nécessaires :
import os
import yaml
conf_file = "/etc/scrippy/config.yml"
conf_file = "/etc/scrippy/scrippy.yml"
with open(conf_file, "r") as conf:
scrippy_conf = yaml.load(conf, Loader=yaml.FullLoader)
for rep in scrippy_conf["env"]:
os.makedirs(rep, 0o0755)
os.makedirs(scrippy_conf["env"][rep], 0o0775)
```
### Activation de l'auto-complétion (facultatif)
@ -298,7 +298,7 @@ Les déclarations optionnelles `@max_instance`, `@timeout`, `@exit_on_wait` et `
Les occurrences mises en attente d'exécution sont exécutées séquentiellement dans l'ordre de leur inscription dans la file d'exécution.
Dans l'exemple suivant, 2 occurrences du script sont permises. Une troisième exécution sera mise en attente 10 secondes, délai au delà duquel le script sortira en erreur s'il n'a pas peu obtenir un créneau d'exécution.
Dans l'exemple suivant, deux occurrences du script sont permises. Une troisième exécution sera mise en attente 10 secondes, délai au delà duquel le script sortira en erreur s'il n'a pas peu obtenir un créneau d'exécution.
```
@max_instance: 2


+ 25683
- 0
logging
File diff suppressed because it is too large
View File


+ 1
- 1
scrippy_core/__init__.py View File

@ -107,7 +107,7 @@ def check_instances(context):
# ------------------------------------------------------------------------------
# INITIALISATION
# ------------------------------------------------------------------------------
conf_file = "/etc/scrippy/config.yml"
conf_file = "/etc/scrippy/scrippy.yml"
try:
with open(conf_file, "r") as conf_file:
scrippy_conf = yaml.load(conf_file, Loader=yaml.FullLoader)


+ 5
- 7
scrippy_core/context/__init__.py View File

@ -173,10 +173,8 @@ class Context:
return False
def __str__(self):
return "Context(name='{}', filename='{}', session='{}', childs='{}', root={})".format(
self.name,
self.filename,
self.session,
list(map(lambda child: str(child), self.childs)),
self.root
)
return "Context(name='{}', filename='{}', session='{}', childs='{}', root={})".format(self.name,
self.filename,
self.session,
list(map(lambda child: str(child), self.childs)),
self.root)

+ 1
- 0
scrippy_core/error_handler/__init__.py View File

@ -12,6 +12,7 @@ class ScrippyCoreError(Exception):
self.message = message
super().__init__(self.message)
def handle_error(kind, value, tb):
"""Récupère toutes les erreurs et sort proprement après avoir logguer les erreurs rencontrées."""
if kind is not None:


+ 2
- 0
setup.cfg View File

@ -19,6 +19,7 @@ install_requires =
coloredlogs>=10.0
prettytable>=0.7.2
filelock>=3.0.12
PyYAML>=5.3
[options.extras_require]
dev =
@ -39,6 +40,7 @@ dev =
auto-changelog==0.5.1
setuptools>=39.2.0
pypirc-chappers>=1.0.8
pylint>=2.4.4
[flake8]
ignore = E111


+ 8
- 0
tests/scrippy/scrippy.yml View File

@ -0,0 +1,8 @@
env:
logdir: /var/log/scrippy
histdir: /var/lib/scrippy/hist
reportdir: /var/lib/scrippy/reports
tmpdir: /var/tmp/scrippy
datadir: /var/lib/scrippy/data
templatedir: /var/lib/scrippy/templates
confdir: /etc/scrippy/conf

+ 8
- 0
tests/scrippy/setup.py View File

@ -0,0 +1,8 @@
import os
import yaml
conf_file = "/etc/scrippy/scrippy.yml"
with open(conf_file, "r") as conf:
scrippy_conf = yaml.load(conf, Loader=yaml.FullLoader)
for rep in scrippy_conf["env"]:
os.makedirs(scrippy_conf["env"][rep], 0o0755)

+ 35
- 0
tests/test_scrippy_core.conf View File

@ -0,0 +1,35 @@
[database]
host = postgres
port = 5432
user = postgres
password = postgres
db = scrippy
[git]
host = gitolite
port = 2201
user = git
repo = gitolite-admin
branch = master
ssh_cmd = "ssh -i {}/ssh/scrippy.rsa -o StrictHostKeyChecking=no"
[smtp]
host = mailer
port = 2500
[pop]
host = mailer
port = 110
user = harry.fink@flying.circus
password = 0123456789
[ssh]
host = remote
port = 2200
user = scrippy
key_file = "{}/ssh/scrippy.rsa"
[api]
host = api
port = 8080
endpoint = user

+ 111
- 4
tests/test_scrippy_core.py View File

@ -1,6 +1,113 @@
"""Module de test scrippy_core."""
#!/usr/bin/python3
"""
--------------------------------------------------------------------------------
@author : Michaël Costa (michael.costa@mcos.nc)
@date : 04/02/2021
@version : 1.0.0
@description : Script de test
--------------------------------------------------------------------------------
Mise a jour :
1.0.0 04/02/2021 - Michaël Costa - Cre: Création
def test_scrippy_core():
"""Test de base."""
assert True
--------------------------------------------------------------------------------
Liste des utilisateurs ou groupe autorisés:
@user:root
--------------------------------------------------------------------------------
Liste des paramètres de configuration obligatoires:
<section>|<clef>|<type>
@conf:database|host|str
@conf:database|port|int
@conf:database|user|str
@conf:database|password|str
@conf:database|db|str
@conf:git|host|str
@conf:git|port|int
@conf:git|user|str
@conf:git|repo|str
@conf:git|branch|str
@conf:git|ssh_cmd|str
@conf:smtp|host|str
@conf:smtp|port|int
@conf:pop|host|str
@conf:pop|port|int
@conf:pop|user|str
@conf:pop|password|str
@conf:ssh|host|str
@conf:ssh|port|int
@conf:ssh|user|str
@conf:ssh|key_file|str
@conf:api|host|str
@conf:api|port|int
@conf:api|endpoint|str
--------------------------------------------------------------------------------
Liste des paramètres des options et arguments d'exécution:
<nom>|<type>|<help>|<num_args>|<defaut>|<conflit>|<implique>|<requis>
@args:remote_path|str|Chemin distant|1||||true
@args:remote_filename|str|nom du fichier distant|1||||true
@args:local_path|str|Chemin local|1||||true
@args:local_filename|str|nom du fichier local|1||||true
@args:mail_recipient|choice|Adresse de courriel du destinataire|1|harry.fink@flying.circus,luiggi,vercotti@flying.circus|||true
--------------------------------------------------------------------------------
Fonctionnement:
---------------
Script de test du cadriciel Scrippy.
Ce script exploite un panel des fonctionnalités proposées par le cadriciel Scrippy telles que:
- Exploitation d'API
- Manipulation de base de données
- Envoi (SMTP) et reception (POP3) de courriel
- Exécution de commandes distantes (SSH)
- Transfert de fichiers (SFTP)
- Manipulation de dépôts Git
- Manipulation de fichiers modèles (Template Jinja2)
D'autres fonctionnalités sont disponibles: https://git.mcos.nc/scrippy
"""
# ------------------------------------------------------------------------------
# Initialisation de l’environnement
# ------------------------------------------------------------------------------
import json
import logging
import scrippy_core
import scrippy_template
import scrippy_remote
import scrippy_db
import scrippy_git
import scrippy_api
import scrippy_mail
# ------------------------------------------------------------------------------
# fonctions
# ------------------------------------------------------------------------------
def get_user_list(host, port, endpoint):
"""Récupère la liste des utilisateurs à partir de l'API."""
params = {}
url = "http://{}:{}/{}".format(host, port, endpoint)
client = scrippy_api.Client(verify=False)
response = client.request(method="GET", url=url, params=params)
assert response.status_code == 200
users = response.json
# ------------------------------------------------------------------------------
# Traitement principal
# ------------------------------------------------------------------------------
def main(args):
with scrippy_core.ScriptContext(__file__) as _context:
config = _context.config
logging.info("[+] Test started...")
logging.info("[+] Test finished !")
# ------------------------------------------------------------------------------
# Point d'entrée
# ------------------------------------------------------------------------------
if __name__ == '__main__':
main(scrippy_core.args)

Loading…
Cancel
Save