{"guid":"Tty5hsEMupvK8XMboo1SCw","title":"Early integration testing with environs framework","subtitle":"Shareable scripting cross-product scenarios","slug":"3550-early-integration-testing-with-environs-framework","link":"https://c3voc.de","description":"Do you know difference between starting mariadb vs postgres server as a regular user? Or apache vs nginx? Or maybe want to know specifics of working example of starting rsync server? \n\nThere is no difference and no specifics - just use generated start / status / stop scripts. And there is more: (spawn as many services as needed(\\*), configure ssl for cluster, build services from source, ...) - without affecting your system(*).\n\nenvirons framework suggests a universal approach for managing various services by generating bash wrappers, with following benefits:\n\n- object oriented approach - it hides internal specifics of service handling and allows an easy way to review and tweak them;\n- brief scripts for complex scenarios in complex topologies, without privileged access to the system;\n- easy to compare behavior of verious topologies;\n- demonstrate \"how-to\" behavior, share reproducible cross-product scripted scenarios in bug reports or TDD / BDD;\n- no OS flavor limit - run everywhere where shell is(*);\n- no extra dependencies - run in cloud, container, VM, CI or local machine.\n\nThe main goal behind environs framework it to cover early integration testing and provide a way to script and share cross-product behavioral scenarios without root access to the system. So far the framework includes scripting possibility for postgresql, apache, nginx, rsync , mariadb(*), openQA, MirrorBrain, MirrorCache, zypper.\n\nDo you know difference between starting mariadb vs postgres server as a regular user? Or apache vs nginx? Or maybe want to know specifics of working example of starting rsync server? \n\nThere is no difference and no specifics - just use generated start / status / stop scripts. And there is more: (spawn as many services as needed(\\*), configure ssl for cluster, build services from source, ...) - without affecting your system(*).\n\nenvirons framework suggests a universal approach for managing various services by generating bash wrappers, with following benefits:\n\n- object oriented approach - it hides internal specifics of service handling and allows an easy way to review and tweak them;\n- brief scripts for complex scenarios in complex topologies, without privileged access to the system;\n- easy to compare behavior of verious topologies;\n- demonstrate \"how-to\" behavior, share reproducible cross-product scripted scenarios in bug reports or TDD / BDD;\n- no OS flavor limit - run everywhere where shell is(*);\n- no extra dependencies - run in cloud, container, VM, CI or local machine.\n\nThe main goal behind environs framework it to cover early integration testing and provide a way to script and share cross-product behavioral scenarios without root access to the system. So far the framework includes scripting possibility for postgresql, apache, nginx, rsync , mariadb(*), openQA, MirrorBrain, MirrorCache, zypper.","original_language":"eng","persons":["Andrii Nikitin"],"tags":["oSVC21","3550","2021","Open Source"],"view_count":20,"promoted":false,"date":"2021-06-19T13:45:00.000+02:00","release_date":"2021-06-19T00:00:00.000+02:00","updated_at":"2026-03-17T06:45:03.914+01:00","length":896,"duration":896,"thumb_url":"https://static.media.ccc.de/media/events/osc/2021/3550-Tty5hsEMupvK8XMboo1SCw.jpg","poster_url":"https://static.media.ccc.de/media/events/osc/2021/3550-Tty5hsEMupvK8XMboo1SCw_preview.jpg","timeline_url":"https://static.media.ccc.de/media/events/osc/2021/3550-Tty5hsEMupvK8XMboo1SCw.timeline.jpg","thumbnails_url":"https://static.media.ccc.de/media/events/osc/2021/3550-Tty5hsEMupvK8XMboo1SCw.thumbnails.vtt","frontend_link":"https://media.ccc.de/v/3550-early-integration-testing-with-environs-framework","url":"https://api.media.ccc.de/public/events/Tty5hsEMupvK8XMboo1SCw","conference_title":"openSUSE Conference 2021","conference_url":"https://api.media.ccc.de/public/conferences/osc21","related":[],"recordings":[{"size":45,"length":896,"mime_type":"video/webm","language":"eng","filename":"oSVC21-3550-eng-Early_integration_testing_with_environs_framework_webm-hd.webm","state":"new","folder":"webm-hd","high_quality":true,"width":1920,"height":1080,"updated_at":"2021-06-19T21:06:04.917+02:00","recording_url":"https://cdn.media.ccc.de/events/osc/2021/webm-hd/oSVC21-3550-eng-Early_integration_testing_with_environs_framework_webm-hd.webm","url":"https://api.media.ccc.de/public/recordings/54099","event_url":"https://api.media.ccc.de/public/events/Tty5hsEMupvK8XMboo1SCw","conference_url":"https://api.media.ccc.de/public/conferences/osc21"},{"size":22,"length":896,"mime_type":"video/webm","language":"eng","filename":"oSVC21-3550-eng-Early_integration_testing_with_environs_framework_webm-sd.webm","state":"new","folder":"webm-sd","high_quality":false,"width":720,"height":576,"updated_at":"2021-06-19T20:53:32.818+02:00","recording_url":"https://cdn.media.ccc.de/events/osc/2021/webm-sd/oSVC21-3550-eng-Early_integration_testing_with_environs_framework_webm-sd.webm","url":"https://api.media.ccc.de/public/recordings/54092","event_url":"https://api.media.ccc.de/public/events/Tty5hsEMupvK8XMboo1SCw","conference_url":"https://api.media.ccc.de/public/conferences/osc21"},{"size":7,"length":896,"mime_type":"audio/opus","language":"eng","filename":"oSVC21-3550-eng-Early_integration_testing_with_environs_framework_opus.opus","state":"new","folder":"opus","high_quality":false,"width":0,"height":0,"updated_at":"2021-06-19T20:46:56.601+02:00","recording_url":"https://cdn.media.ccc.de/events/osc/2021/opus/oSVC21-3550-eng-Early_integration_testing_with_environs_framework_opus.opus","url":"https://api.media.ccc.de/public/recordings/54087","event_url":"https://api.media.ccc.de/public/events/Tty5hsEMupvK8XMboo1SCw","conference_url":"https://api.media.ccc.de/public/conferences/osc21"},{"size":18,"length":896,"mime_type":"video/mp4","language":"eng","filename":"oSVC21-3550-eng-Early_integration_testing_with_environs_framework_sd.mp4","state":"new","folder":"h264-sd","high_quality":false,"width":720,"height":576,"updated_at":"2021-06-19T20:45:55.889+02:00","recording_url":"https://cdn.media.ccc.de/events/osc/2021/h264-sd/oSVC21-3550-eng-Early_integration_testing_with_environs_framework_sd.mp4","url":"https://api.media.ccc.de/public/recordings/54086","event_url":"https://api.media.ccc.de/public/events/Tty5hsEMupvK8XMboo1SCw","conference_url":"https://api.media.ccc.de/public/conferences/osc21"},{"size":13,"length":896,"mime_type":"audio/mpeg","language":"eng","filename":"oSVC21-3550-eng-Early_integration_testing_with_environs_framework_mp3.mp3","state":"new","folder":"mp3","high_quality":false,"width":0,"height":0,"updated_at":"2021-06-19T20:43:15.855+02:00","recording_url":"https://cdn.media.ccc.de/events/osc/2021/mp3/oSVC21-3550-eng-Early_integration_testing_with_environs_framework_mp3.mp3","url":"https://api.media.ccc.de/public/recordings/54083","event_url":"https://api.media.ccc.de/public/events/Tty5hsEMupvK8XMboo1SCw","conference_url":"https://api.media.ccc.de/public/conferences/osc21"},{"size":29,"length":896,"mime_type":"video/mp4","language":"eng","filename":"oSVC21-3550-eng-Early_integration_testing_with_environs_framework_hd.mp4","state":"new","folder":"h264-hd","high_quality":true,"width":1920,"height":1080,"updated_at":"2021-06-19T20:43:10.734+02:00","recording_url":"https://cdn.media.ccc.de/events/osc/2021/h264-hd/oSVC21-3550-eng-Early_integration_testing_with_environs_framework_hd.mp4","url":"https://api.media.ccc.de/public/recordings/54082","event_url":"https://api.media.ccc.de/public/events/Tty5hsEMupvK8XMboo1SCw","conference_url":"https://api.media.ccc.de/public/conferences/osc21"}]}