diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index ae334f6..0000000 --- a/Dockerfile +++ /dev/null @@ -1,51 +0,0 @@ -FROM baseruntime/baseruntime:latest - -# PostgreSQL image for OpenShift. -# Volumes: -# * /var/lib/psql/data - Database cluster for PostgreSQL -# Environment: -# * $POSTGRESQL_USER - Database user name -# * $POSTGRESQL_PASSWORD - User's password -# * $POSTGRESQL_DATABASE - Name of the database to create -# * $POSTGRESQL_ADMIN_PASSWORD (Optional) - Password for the 'postgres' -# PostgreSQL administrative account - -ENV POSTGRESQL_VERSION=9.5 \ - HOME=/var/lib/pgsql \ - PGUSER=postgres - -LABEL io.k8s.description="PostgreSQL is an advanced Object-Relational database management system" \ - io.k8s.display-name="PostgreSQL 9.5" \ - io.openshift.expose-services="5432:postgresql" \ - io.openshift.tags="database,postgresql,postgresql95" \ - com.redhat.component="postgresql" \ - maintainer="Pavel Raiskup " \ - name="$FCG/postgresql" \ - version="0" \ - release="1.$DISTTAG" \ - architecture="x86_64" \ - usage="Run without arguments to get usage info." \ - help="/help.1" - -EXPOSE 5432 - -ADD root / - -COPY repos/* /etc/yum.repos.d/ - -RUN microdnf --nodocs --enablerepo postgresql install -y postgresql postgresql-server postgresql-contrib && \ - microdnf --nodocs --enablerepo fedora install -y rsync tar gettext bind-utils nss_wrapper findutils python && \ - microdnf clean all && \ - test "$(id postgres)" = "uid=26(postgres) gid=26(postgres) groups=26(postgres)" && \ - mkdir -p /var/lib/pgsql/data && \ - /usr/libexec/fix-permissions /var/lib/pgsql && \ - /usr/libexec/fix-permissions /var/run/postgresql - -# Get prefix path and path to scripts rather than hard-code them in scripts -ENV CONTAINER_SCRIPTS_PATH=/usr/share/container-scripts/postgresql - -VOLUME ["/var/lib/pgsql/data"] - -USER 26 - -CMD ["run-postgresql"] diff --git a/Makefile b/Makefile deleted file mode 100644 index c635e5e..0000000 --- a/Makefile +++ /dev/null @@ -1,15 +0,0 @@ -IMAGE_NAME = postgresql - -MODULEMDURL=file://postgresql.yaml - -default: run - -build: - docker build --tag=$(IMAGE_NAME) . - -run: build - docker run -d $(IMAGE_NAME) - -test: build - cd tests; MODULE=docker MODULEMD=$(MODULEMDURL) URL="docker=$(IMAGE_NAME)" make all - cd tests; MODULE=rpm MODULEMD=$(MODULEMDURL) URL="docker=$(IMAGE_NAME)" make all diff --git a/postgresql.yaml b/postgresql.yaml index fa4ff16..07f6f44 100644 --- a/postgresql.yaml +++ b/postgresql.yaml @@ -1,41 +1,56 @@ +--- document: modulemd -version: 1 +version: 2 data: - summary: postgresql module - description: This postgresql module has been generated. - license: - module: [ MIT ] - dependencies: - buildrequires: - bootstrap: master - requires: - platform: master - references: - community: https://docs.pagure.org/modularity/ - documentation: https://github.com/modularity-modules/postgresql - tracker: https://github.com/modularity-modules/postgresql - api: - rpms: - - postgresql - profiles: - default: - rpms: - - postgresql-server - server: - rpms: - - postgresql-server - client: - rpms: - - postgresql - filter: {} - components: - rpms: - # postgresql-10.0-3.fc28 - postgresql: - rationale: Generated. - ref: 07894e0da4b994092abd0084fba982e075ccf3f3 - # uuid-1.6.2-39.fc27 - uuid: - rationale: Generated. - ref: 43c916caff937bdf8a97ded1abff3e01df4895f4 - + summary: PostgreSQL module + description: PostgreSQL is an advanced Object-Relational database + management system (DBMS). + The PostgreSQL server can be found in the + postgresql-server sub-package. + license: + module: [MIT] + dependencies: + - buildrequires: + platform: [] + requires: + platform: [] + references: + community: https://docs.pagure.org/modularity/ + documentation: https://www.postgresql.org/docs/ + tracker: https://github.com/modularity-modules/postgresql + api: + rpms: + - postgresql + - postgresql-server + profiles: + server: + rpms: + - postgresql-server + client: + rpms: + - postgresql + filter: {} + components: + rpms: + postgresql: + rationale: main server/client components + ref: stream-postgresql-13 + buildorder: 0 + pgaudit: + rationale: pgaudit postgresql extension + ref: stream-postgresql-13 + buildorder: 1 + # https://github.com/timescale/timescaledb/issues/1456 + # timescaledb: + # rationale: timescaledb postgresql extension + # ref: stream-postgresql-12 + # buildorder: 2 + # # https://src.fedoraproject.org/rpms/postgres-decoderbufs/pull-request/1 + postgres-decoderbufs: + rationale: postgres-decoderbufs postgresql extension + ref: stream-postgresql-13 + buildorder: 1 + pg_repack: + rationale: pg_repack extension + ref: stream-postgresql-13 + buildorder: 1 diff --git a/repos/fedora.repo b/repos/fedora.repo deleted file mode 100644 index f86d71c..0000000 --- a/repos/fedora.repo +++ /dev/null @@ -1,5 +0,0 @@ -[fedora] -name=fedora -baseurl=https://mirrors.nic.cz/fedora/linux/development/26/Everything/x86_64/os/ -enabled=0 - diff --git a/repos/postgresql.repo b/repos/postgresql.repo deleted file mode 100644 index 584b510..0000000 --- a/repos/postgresql.repo +++ /dev/null @@ -1,4 +0,0 @@ -[postgresql] -name=postgresql -baseurl=https://kojipkgs.fedoraproject.org/repos/module-5a0a295c9673c2a1/latest/x86_64/ -enabled=0 diff --git a/root/help.1 b/root/help.1 deleted file mode 100644 index 89c84d9..0000000 --- a/root/help.1 +++ /dev/null @@ -1,190 +0,0 @@ -.\"t -.\" WARNING: Do not edit this file manually, it is generated from README.md automatically. -.\" -.\"t -.\" Automatically generated by Pandoc 1.16.0.2 -.\" -.TH "POSTGRESQL\-95\-RHEL7" "1" "February 22, 2017" "Container Image Pages" "" -.hy -.SH PostgreSQL Docker image -.PP -This repository contains Dockerfiles for PostgreSQL images for general -usage and OpenShift. -Users can choose between RHEL and CentOS based images. -.SS Environment variables and volumes -.PP -The image recognizes the following environment variables that you can -set during initialization by passing \f[C]\-e\ VAR=VALUE\f[] to the -Docker run command. -.PP -.TS -tab(@); -lw(26.7n) lw(43.3n). -T{ -Variable name -T}@T{ -Description -T} -_ -T{ -\f[C]POSTGRESQL_USER\f[] -T}@T{ -User name for PostgreSQL account to be created -T} -T{ -\f[C]POSTGRESQL_PASSWORD\f[] -T}@T{ -Password for the user account -T} -T{ -\f[C]POSTGRESQL_DATABASE\f[] -T}@T{ -Database name -T} -T{ -\f[C]POSTGRESQL_ADMIN_PASSWORD\f[] -T}@T{ -Password for the \f[C]postgres\f[] admin account (optional) -T} -.TE -.PP -The following environment variables influence the PostgreSQL -configuration file. -They are all optional. -.PP -.TS -tab(@); -lw(15.7n) lw(37.6n) lw(16.7n). -T{ -Variable name -T}@T{ -Description -T}@T{ -Default -T} -_ -T{ -\f[C]POSTGRESQL_MAX_CONNECTIONS\f[] -T}@T{ -The maximum number of client connections allowed -T}@T{ -100 -T} -T{ -\f[C]POSTGRESQL_MAX_PREPARED_TRANSACTIONS\f[] -T}@T{ -Sets the maximum number of transactions that can be in the "prepared" -state. -If you are using prepared transactions, you will probably want this to -be at least as large as max_connections -T}@T{ -0 -T} -T{ -\f[C]POSTGRESQL_SHARED_BUFFERS\f[] -T}@T{ -Sets how much memory is dedicated to PostgreSQL to use for caching data -T}@T{ -32M -T} -T{ -\f[C]POSTGRESQL_EFFECTIVE_CACHE_SIZE\f[] -T}@T{ -Set to an estimate of how much memory is available for disk caching by -the operating system and within the database itself -T}@T{ -128M -T} -.TE -.PP -You can also set the following mount points by passing the -\f[C]\-v\ /host:/container\f[] flag to Docker. -.PP -.TS -tab(@); -l l. -T{ -Volume mount point -T}@T{ -Description -T} -_ -T{ -\f[C]/var/lib/pgsql/data\f[] -T}@T{ -PostgreSQL database cluster directory -T} -.TE -.PP -\f[B]Notice: When mouting a directory from the host into the container, -ensure that the mounted directory has the appropriate permissions and -that the owner and group of the directory matches the user UID or name -which is running inside the container.\f[] -.SS Usage -.PP -For this, we will assume that you are using the -\f[C]openshift/postgresql\-92\-centos7\f[] image. -If you want to set only the mandatory environment variables and not -store the database in a host directory, execute the following command: -.IP -.nf -\f[C] -$\ docker\ run\ \-d\ \-\-name\ postgresql_database\ \-e\ POSTGRESQL_USER=user\ \-e\ POSTGRESQL_PASSWORD=pass\ \-e\ POSTGRESQL_DATABASE=db\ \-p\ 5432:5432\ openshift/postgresql\-92\-centos7 -\f[] -.fi -.PP -This will create a container named \f[C]postgresql_database\f[] running -PostgreSQL with database \f[C]db\f[] and user with credentials -\f[C]user:pass\f[]. -Port 5432 will be exposed and mapped to the host. -If you want your database to be persistent across container executions, -also add a \f[C]\-v\ /host/db/path:/var/lib/pgsql/data\f[] argument. -This will be the PostgreSQL database cluster directory. -.PP -If the database cluster directory is not initialized, the entrypoint -script will first run -\f[C]initdb\f[] (http://www.postgresql.org/docs/9.2/static/app-initdb.html) -and setup necessary database users and passwords. -After the database is initialized, or if it was already present, -\f[C]postgres\f[] (http://www.postgresql.org/docs/9.2/static/app-postgres.html) -is executed and will run as PID 1. -You can stop the detached container by running -\f[C]docker\ stop\ postgresql_database\f[]. -.SS PostgreSQL auto\-tuning -.PP -When the PostgreSQL image is run with the \f[C]\-\-memory\f[] parameter -set and if there are no values provided for -\f[C]POSTGRESQL_SHARED_BUFFERS\f[] and -\f[C]POSTGRESQL_EFFECTIVE_CACHE_SIZE\f[] those values are automatically -calculated based on the value provided in the \f[C]\-\-memory\f[] -parameter. -.PP -The values are calculated based on the -upstream (https://wiki.postgresql.org/wiki/Tuning_Your_PostgreSQL_Server) -formulas. -For the \f[C]shared_buffers\f[] we use 1/4 of given memory and for the -\f[C]effective_cache_size\f[] we set the value to 1/2 of the given -memory. -.SS PostgreSQL admin account -.PP -The admin account \f[C]postgres\f[] has no password set by default, only -allowing local connections. -You can set it by setting the \f[C]POSTGRESQL_ADMIN_PASSWORD\f[] -environment variable when initializing your container. -This will allow you to login to the \f[C]postgres\f[] account remotely. -Local connections will still not require a password. -.SS Changing passwords -.PP -Since passwords are part of the image configuration, the only supported -method to change passwords for the database user -(\f[C]POSTGRESQL_USER\f[]) and \f[C]postgres\f[] admin user is by -changing the environment variables \f[C]POSTGRESQL_PASSWORD\f[] and -\f[C]POSTGRESQL_ADMIN_PASSWORD\f[], respectively. -.PP -Changing database passwords through SQL statements or any way other than -through the environment variables aforementioned will cause a mismatch -between the values stored in the variables and the actual passwords. -Whenever a database container starts it will reset the passwords to the -values stored in the environment variables. -.SH AUTHORS -Red Hat. diff --git a/root/usr/bin/cgroup-limits b/root/usr/bin/cgroup-limits deleted file mode 100755 index b9d4edc..0000000 --- a/root/usr/bin/cgroup-limits +++ /dev/null @@ -1,92 +0,0 @@ -#!/usr/bin/python - -""" -Script for parsing cgroup information - -This script will read some limits from the cgroup system and parse -them, printing out "VARIABLE=VALUE" on each line for every limit that is -successfully read. Output of this script can be directly fed into -bash's export command. Recommended usage from a bash script: - - set -o errexit - export_vars=$(cgroup-limits) ; export $export_vars - -Variables currently supported: - MAX_MEMORY_LIMIT_IN_BYTES - Maximum possible limit MEMORY_LIMIT_IN_BYTES can have. This is - currently constant value of 9223372036854775807. - MEMORY_LIMIT_IN_BYTES - Maximum amount of user memory in bytes. If this value is set - to the same value as MAX_MEMORY_LIMIT_IN_BYTES, it means that - there is no limit set. The value is taken from - /sys/fs/cgroup/memory/memory.limit_in_bytes - NUMBER_OF_CORES - Number of detected CPU cores that can be used. This value is - calculated from /sys/fs/cgroup/cpuset/cpuset.cpus - NO_MEMORY_LIMIT - Set to "true" if MEMORY_LIMIT_IN_BYTES is so high that the caller - can act as if no memory limit was set. Undefined otherwise. -""" - -from __future__ import print_function -import sys - - -def _read_file(path): - try: - with open(path, 'r') as f: - return f.read().strip() - except IOError: - return None - - -def get_memory_limit(): - """ - Read memory limit, in bytes. - """ - - limit = _read_file('/sys/fs/cgroup/memory/memory.limit_in_bytes') - if limit is None or not limit.isdigit(): - print("Warning: Can't detect memory limit from cgroups", - file=sys.stderr) - return None - return int(limit) - - -def get_number_of_cores(): - """ - Read number of CPU cores. - """ - - core_count = 0 - - line = _read_file('/sys/fs/cgroup/cpuset/cpuset.cpus') - if line is None: - print("Warning: Can't detect number of CPU cores from cgroups", - file=sys.stderr) - return None - - for group in line.split(','): - core_ids = list(map(int, group.split('-'))) - if len(core_ids) == 2: - core_count += core_ids[1] - core_ids[0] + 1 - else: - core_count += 1 - - return core_count - - -if __name__ == "__main__": - env_vars = { - "MAX_MEMORY_LIMIT_IN_BYTES": 9223372036854775807, - "MEMORY_LIMIT_IN_BYTES": get_memory_limit(), - "NUMBER_OF_CORES": get_number_of_cores() - } - - env_vars = {k: v for k, v in env_vars.items() if v is not None} - - if env_vars.get("MEMORY_LIMIT_IN_BYTES", 0) >= 92233720368547: - env_vars["NO_MEMORY_LIMIT"] = "true" - - for key, value in env_vars.items(): - print("{0}={1}".format(key, value)) diff --git a/root/usr/bin/container-entrypoint b/root/usr/bin/container-entrypoint deleted file mode 100755 index 5fc4448..0000000 --- a/root/usr/bin/container-entrypoint +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash - -exec "$@" diff --git a/root/usr/bin/run-postgresql b/root/usr/bin/run-postgresql deleted file mode 100755 index 1c8de78..0000000 --- a/root/usr/bin/run-postgresql +++ /dev/null @@ -1,28 +0,0 @@ -#!/bin/bash - -export ENABLE_REPLICATION=${ENABLE_REPLICATION:-false} - -set -eu -export_vars=$(cgroup-limits) ; export $export_vars - -source "${CONTAINER_SCRIPTS_PATH}/common.sh" - -set_pgdata -check_env_vars -generate_passwd_file -generate_postgresql_config - -if [ ! -f "$PGDATA/postgresql.conf" ]; then - initialize_database - NEED_TO_CREATE_USERS=yes -fi - -pg_ctl -w start -o "-h ''" -if [ "${NEED_TO_CREATE_USERS:-}" == "yes" ]; then - create_users -fi -set_passwords -pg_ctl stop - -unset_env_vars -exec postgres "$@" diff --git a/root/usr/bin/run-postgresql-master b/root/usr/bin/run-postgresql-master deleted file mode 100755 index 79e7cc2..0000000 --- a/root/usr/bin/run-postgresql-master +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash - -export ENABLE_REPLICATION=true - -exec run-postgresql "$@" diff --git a/root/usr/bin/run-postgresql-slave b/root/usr/bin/run-postgresql-slave deleted file mode 100755 index 5d42d0d..0000000 --- a/root/usr/bin/run-postgresql-slave +++ /dev/null @@ -1,36 +0,0 @@ -#!/bin/bash - -export ENABLE_REPLICATION=true - -set -eu -export_vars=$(cgroup-limits) ; export $export_vars - -source "$CONTAINER_SCRIPTS_PATH"/common.sh - -set_pgdata - -function initialize_replica() { - echo "Initializing PostgreSQL slave ..." - # TODO: Validate and reuse existing data? - rm -rf $PGDATA - PGPASSWORD="${POSTGRESQL_MASTER_PASSWORD}" pg_basebackup -x --no-password --pgdata ${PGDATA} --host=${MASTER_FQDN} --port=5432 -U "${POSTGRESQL_MASTER_USER}" - - # PostgreSQL recovery configuration. - generate_postgresql_recovery_config - cat >> "$PGDATA/recovery.conf" <&2 "error: $1" - fi - - cat >&2 </dev/null) - # FIXME: This is for debugging (docker run) - if [ -v POSTGRESQL_MASTER_IP ]; then - endpoints=${POSTGRESQL_MASTER_IP:-} - fi - if [ -z "$endpoints" ]; then - >&2 echo "Failed to resolve PostgreSQL master IP address" - exit 3 - fi - echo -n "$(echo $endpoints | cut -d ' ' -f 1)" -} - -# New config is generated every time a container is created. It only contains -# additional custom settings and is included from $PGDATA/postgresql.conf. -function generate_postgresql_config() { - envsubst \ - < "${CONTAINER_SCRIPTS_PATH}/openshift-custom-postgresql.conf.template" \ - > "${POSTGRESQL_CONFIG_FILE}" - - if [ "${ENABLE_REPLICATION}" == "true" ]; then - envsubst \ - < "${CONTAINER_SCRIPTS_PATH}/openshift-custom-postgresql-replication.conf.template" \ - >> "${POSTGRESQL_CONFIG_FILE}" - fi -} - -function generate_postgresql_recovery_config() { - envsubst \ - < "${CONTAINER_SCRIPTS_PATH}/openshift-custom-recovery.conf.template" \ - > "${POSTGRESQL_RECOVERY_FILE}" -} - -# Generate passwd file based on current uid -function generate_passwd_file() { - export USER_ID=$(id -u) - export GROUP_ID=$(id -g) - grep -v ^postgres /etc/passwd > "$HOME/passwd" - echo "postgres:x:${USER_ID}:${GROUP_ID}:PostgreSQL Server:${HOME}:/bin/bash" >> "$HOME/passwd" - export LD_PRELOAD=libnss_wrapper.so - export NSS_WRAPPER_PASSWD=${HOME}/passwd - export NSS_WRAPPER_GROUP=/etc/group -} - -function initialize_database() { - # Initialize the database cluster with utf8 support enabled by default. - # This might affect performance, see: - # http://www.postgresql.org/docs/9.5/static/locale.html - LANG=${LANG:-en_US.utf8} initdb - - # PostgreSQL configuration. - cat >> "$PGDATA/postgresql.conf" <> "$PGDATA/pg_hba.conf" < -# - -from avocado import main -from moduleframework import module_framework - - -class ExampleRpmValidation(module_framework.AvocadoTest): - """ - :avocado: enable - """ - fhs_base_paths = [ - '/bin', - '/boot', - '/dev', - '/etc', - '/home', - '/lib', - '/lib64', - '/media', - '/mnt', - '/opt', - '/proc', - '/root', - '/run', - '/sbin', - '/sys', - '/srv', - '/tmp', - '/usr/bin' - ] - - def testPaths(self): - self.start() - for directory in self.fhs_base_paths: - self.run("test -d %s" % directory) diff --git a/tests/sanity1.py b/tests/sanity1.py deleted file mode 100644 index 677abff..0000000 --- a/tests/sanity1.py +++ /dev/null @@ -1,46 +0,0 @@ -#!/usr/bin/python -# -*- coding: utf-8 -*- -# -# This Modularity Testing Framework helps you to write tests for modules -# Copyright (C) 2017 Red Hat, Inc. -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# he Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Authors: Rado Pitonak -# - -from avocado import main -from avocado.core import exceptions -from moduleframework import module_framework - - -class SanityCheck1(module_framework.AvocadoTest): - """ - :avocado: enable - """ - - def test1(self): - self.start() - self.run("ls / | grep bin") - - # check if perl is installed in the right version. - def test2PostgresVersion(self): - postgresVersion = "9.6" - self.start() - self.run("postgres --version | grep " + postgresVersion) - - -if __name__ == '__main__': - main() diff --git a/tests/sanity2.py b/tests/sanity2.py deleted file mode 100644 index a6bee42..0000000 --- a/tests/sanity2.py +++ /dev/null @@ -1,47 +0,0 @@ -#!/usr/bin/python -# -*- coding: utf-8 -*- -# -# This Modularity Testing Framework helps you to write tests for modules -# Copyright (C) 2017 Red Hat, Inc. -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# he Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Authors: Rado Pitonak -# - -from avocado import main -from avocado.core import exceptions -from moduleframework import module_framework -import time - - -class SanityCheck2(module_framework.AvocadoTest): - """ - :avocado: enable - """ - - def testConnectToDB(self): - self.start() - time.sleep(5) - self.run("psql -U $POSTGRESQL_USER -d $POSTGRESQL_DATABASE -c 'SELECT 1'") - - def testCreateTable(self): - self.start() - time.sleep(5) - self.run("psql -U $POSTGRESQL_USER -d $POSTGRESQL_DATABASE -c 'CREATE TABLE mytable(ID INT PRIMARY KEY NOT NULL);'") - - -if __name__ == '__main__': - main() diff --git a/tests/simpleTest.py b/tests/simpleTest.py deleted file mode 100644 index 780e387..0000000 --- a/tests/simpleTest.py +++ /dev/null @@ -1,47 +0,0 @@ -#!/usr/bin/python -# -*- coding: utf-8 -*- -# -# This Modularity Testing Framework helps you to write tests for modules -# Copyright (C) 2017 Red Hat, Inc. -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# he Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License along -# with this program; if not, write to the Free Software Foundation, Inc., -# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. -# -# Authors: Jan Scotka -# - -from moduleframework import module_framework -import os - - -class simpleTests(module_framework.AvocadoTest): - """ - :avocado: enable - """ - - def testPath(self): - print ">>>>>>>>>>>>>> ", module_framework.__file__ - print ">>>>>>>>>>>>>> ", __file__ - - def testAssertIn(self): - self.start() - self.assertIn("sbin", self.run("ls /").stdout) - - def testInsideModule(self): - self.start() - self.assertEqual("a", self.run("echo a").stdout.strip()) - - def testCommandOnHost(self): - self.start() - self.assertEqual("a", self.runHost("echo a").stdout.strip())