moodlehq / moodle-plugin-ci

Helps running Moodle plugins analysis checks and tests under various CI environments.
https://moodlehq.github.io/moodle-plugin-ci/
GNU General Public License v3.0
44 stars 45 forks source link

Request: add Oracle DB support #128

Closed jpahullo closed 6 months ago

jpahullo commented 3 years ago

I checked the created issues and I didn't realize some issue is related to this, so I'm creating it.

As stated in Moodle Dev Telegram chat, It would be really useful to support Oracle (this issue) and mssql (issue #92).

I've tried adding Oracle support in one plugin and then checked that only mysql, pgsql and mariadb are supported db-types.

As I can see, I think it is necessary mainly to add an implementation class of any db-type under https://github.com/moodlehq/moodle-plugin-ci/tree/master/src/Installer/Database.

My original idea was to use the docker image for Oracle used under moodlehq/moodle-docker. However, Github Actions require public docker hub images (if I understand it correct) and it seems it isn't. So, I was trying another db image, gvenzl/oracle-xe (supporting 18c and 11 Oracle versions). I successfully managed to build the image, but then I realized moodle-plugin-ci does not support it.

My last trials can be found here. One example is this:

image

One really useful point of that oracle image is that is has a builtin checker for db being ready. It takes a bit of time however:

image

The important bits of the yml are the following:

    services:
      oracle:
        image: gvenzl/oracle-xe
        env:
          ORACLE_RANDOM_PASSWORD: yes
          ORACLE_DATABASE: moodle
          APP_USER: moodle
          APP_USER_PASSWORD: moodle
        ports:
          - 1521:1521
        options: >-
          --health-cmd healthcheck.sh
          --health-interval 20s
          --health-timeout 10s
          --health-retries 10

This image requires non-empty passwords, so I needed to set up non-empty passwords on the ci installing:

      - name: Install moodle-plugin-ci
        run: |
          moodle-plugin-ci install --plugin ./plugin --db-host=127.0.0.1 --db-user moodle --db-pass moodle --db-name moodle
        env:
          DB: ${{ matrix.database }}
          MOODLE_BRANCH: ${{ matrix.moodle-branch }}
jpahullo commented 3 years ago

Looking for a good example of adding support for a new db-type, found this commit b82d0ac (adding mariadb support).

jpahullo commented 3 years ago

I was facing problems defining new database and new users. Looking at the container-entrypoint.sh from gvenzl/oracle-xe I reached to this pieces that works from CLI (what is expected to be used by the getCreateDatabaseCommand() method. However, it is specific to this oracle image, since it requires to define file paths. For instance, moodle-db-oracle is based on another image with different file paths.

Creating database (dbname to be replaced by the proper db name):

sqlplus -s / as sysdba <<EOF
     -- Exit on any errors
     WHENEVER SQLERROR EXIT SQL.SQLCODE

     CREATE PLUGGABLE DATABASE dbname \
      ADMIN USER PDBADMIN IDENTIFIED BY "dbname" \
       FILE_NAME_CONVERT=('pdbseed','dbname') \
        DEFAULT TABLESPACE USERS \
         DATAFILE '${ORACLE_BASE}/oradata/${ORACLE_SID}/dbname/users01.dbf' \
          SIZE 1m AUTOEXTEND ON NEXT 10m MAXSIZE UNLIMITED;

     ALTER PLUGGABLE DATABASE dbname OPEN READ WRITE;
     ALTER PLUGGABLE DATABASE dbname SAVE STATE;
     exit;
EOF

Creating a user to the default db (username and password to be replaced by the proper values):

sqlplus -s / as sysdba <<EOF
     -- Exit on any errors
     WHENEVER SQLERROR EXIT SQL.SQLCODE

     ALTER SESSION SET CONTAINER=XEPDB1;

     CREATE USER username IDENTIFIED BY "password" QUOTA UNLIMITED ON USERS;
     GRANT CONNECT, RESOURCE, CREATE VIEW, CREATE MATERIALIZED VIEW TO username;
     exit;
EOF

Create user on the specific moodle db (username and password to be replaced by the proper values):

sqlplus -s / as sysdba <<EOF
       -- Exit on any errors
       WHENEVER SQLERROR EXIT SQL.SQLCODE

       ALTER SESSION SET CONTAINER=dbname;

       CREATE USER username IDENTIFIED BY "password" QUOTA UNLIMITED ON USERS;
       GRANT CONNECT, RESOURCE, CREATE VIEW, CREATE MATERIALIZED VIEW TO username;
       exit;
EOF

Manually, I created a container locally with this command:

docker run -p 1521:1521 -e ORACLE_RANDOM_PASSWORD=yes -e APP_USER=moodle -e APP_USER_PASSWORD=moodle gvenzl/oracle-xe

Then, after being created, use the above commands inside docker exec -it container-name bash. They will work.

Finally, as a connection testing I run:

 bash-4.4$ sqlplus -s username/password@localhost/dbname <<EOF
>        -- Exit on any errors
>        WHENEVER SQLERROR EXIT SQL.SQLCODE
>        
>        ALTER SESSION SET CONTAINER=dbname;
> 
>        select 'success' as result from dual;
>        exit;
> EOF

Session altered.

RESULT
-------
success

bash-4.4$ 
jpahullo commented 3 years ago

So, I think there should be the 3 commands altogether as a result of the invokation of OracleDatabase::getCreateDatabaseCommand() method.

jpahullo commented 3 years ago

Finally, retried with moodlehq/moodle-db-oracle and it works on GHA. Maybe yesterday there was some networking problem or so when I tried.

paulholden commented 3 years ago

Finally, retried with moodlehq/moodle-db-oracle and it works on GHA. Maybe yesterday there was some networking problem or so when I tried.

Shouldn't that be -r2: https://hub.docker.com/r/moodlehq/moodle-db-oracle-r2 ?

jpahullo commented 3 years ago

Yes, thanks, I tried that version.

jpahullo commented 3 years ago

I'm facing this problem:

[info] Initialize test suite
[debug] Initialize PHPUnit
  RUN  php -d log_errors=1 -d error_log=NULL /home/runner/work/moodle-plugin-ci/moodle-plugin-ci/moodle/admin/tool/behat/cli/util_single_run.php --install
  OUT  !!! <p>Error: database table prefix is too long (oracle)</p>
  OUT  <p>The site administrator must fix this problem. Maximum length for table prefixes in oracle is 2 characters.</p> !!!
  OUT  
  OUT  Debug info: 
  OUT  Error code: prefixtoolong
  OUT  Stack trace: * line 142 of /lib/dml/oci_native_moodle_database.php: dml_exception thrown
  OUT  * line 340 of /lib/dmllib.php: call to oci_native_moodle_database->connect()
  OUT  * line 630 of /lib/setup.php: call to setup_DB()
  OUT  * line 121 of /admin/tool/behat/cli/util_single_run.php: call to require()
  OUT  
  RES  1 Command did not run successfully
  RUN  php -d log_errors=1 -d error_log=NULL /home/runner/work/moodle-plugin-ci/moodle-plugin-ci/moodle/admin/tool/phpunit/cli/util.php --install
  OUT  !!! <p>Error: database table prefix is too long (oracle)</p>
  OUT  <p>The site administrator must fix this problem. Maximum length for table prefixes in oracle is 2 characters.</p> !!!
  OUT  
  OUT  Debug info: 
  OUT  Error code: prefixtoolong
  OUT  Stack trace: * line 142 of /lib/dml/oci_native_moodle_database.php: dml_exception thrown
  OUT  * line 340 of /lib/dmllib.php: call to oci_native_moodle_database->connect()
  OUT  * line 630 of /lib/setup.php: call to setup_DB()
  OUT  * line 219 of /lib/phpunit/bootstrap.php: call to require()
  OUT  * line 83 of /admin/tool/phpunit/cli/util.php: call to require()
  OUT  
  RES  1 Command did not run successfully

I cannot reach the point where this prefix is set up.

scara commented 3 years ago

Hi @jpahullo, give a look at here since it will be used here. Guessing, a fix could be:

...
$CFG->prefix    = 'm_';
...
// PHPUnit settings.
$CFG->phpunit_prefix   = 'u_';
...
// Behat settings.
$CFG->behat_prefix        = 'b_';

HTH, Matteo

jpahullo commented 3 years ago

One step further. PHP driver oci8 is not present.

scara commented 3 years ago

Hi @jpahullo, you could borrow the "way" to install oci8 from https://github.com/moodlehq/moodle-php-apache:

or give https://github.com/marketplace/actions/setup-php-action#heavy_plus_sign-php-extension-support a try:

- name: Setup PHP with fail-fast
  uses: shivammathur/setup-php@v2
  with:
    php-version: '7.4'
    extensions: oci8
  env:
    fail-fast: true

HTH, Matteo

jpahullo commented 3 years ago

Hi @scara ! It seems we "read" our minds. I was thinking exactly like that, or either from the ci process from moodle.org.

Thanks for the info! Sure it will help!

jpahullo commented 3 years ago

Other option is to build docker images with all dependencies and extensions included, like we did at https://hub.docker.com/r/sred/php-apache-oracle/tags?page=1&ordering=last_updated, so that image is already built, gaining in set up time and reducing total time cost of testing and deployment of testing environments (set up once, and reused any number of times)

jpahullo commented 3 years ago

I tried the second options and at least for php 7.4 it works correctly. Now, I'm facing troubles autenticating the user. Trying putting credentials on the install command.

jpahullo commented 3 years ago

I'm putting the credentials into the OracleDatabase.php class in order to simplify the set up of CI on GHA

jpahullo commented 3 years ago

It seems now it will work somehow. However, I can see this error output:

[debug] Initialize PHPUnit
  RUN  php -d log_errors=1 -d error_log=NULL /home/runner/work/moodle-plugin-ci/moodle-plugin-ci/moodle/admin/tool/behat/cli/util_single_run.php --install
  ERR  Default exception handler: Exception - Call to a member function is_temptable() on null Debug: 
  ERR  Error code: generalexceptionmessage
  ERR  * line 229 of /lib/ddl/sql_generator.php: Error thrown
  ERR  * line 100 of /lib/ddl/database_manager.php: call to sql_generator->table_exists()
  ERR  * line 466 of /question/engine/upgrade/upgradelib.php: call to database_manager->table_exists()
  ERR  * line 736 of /lib/environmentlib.php: call to quiz_attempts_upgraded()
  ERR  * line 482 of /lib/environmentlib.php: call to environment_custom_checks()
  ERR  * line 106 of /lib/environmentlib.php: call to environment_check()
  ERR  * line 455 of /lib/installlib.php: call to check_moodle_environment()
  ERR  * line 91 of /lib/behat/classes/util.php: call to install_cli_database()
  ERR  * line 162 of /admin/tool/behat/cli/util_single_run.php: call to behat_util::install_site()
  ERR  
  ERR  
  OUT  !!! Exception - Call to a member function is_temptable() on null !!!
  OUT  !! 
  OUT  Error code: generalexceptionmessage !!
  OUT  !! Stack trace: * line 229 of /lib/ddl/sql_generator.php: Error thrown
  OUT  * line 100 of /lib/ddl/database_manager.php: call to sql_generator-&gt;table_exists()
  OUT  * line 466 of /question/engine/upgrade/upgradelib.php: call to database_manager-&gt;table_exists()
  OUT  * line 736 of /lib/environmentlib.php: call to quiz_attempts_upgraded()
  OUT  * line 482 of /lib/environmentlib.php: call to environment_custom_checks()
  OUT  * line 106 of /lib/environmentlib.php: call to environment_check()
  OUT  * line 455 of /lib/installlib.php: call to check_moodle_environment()
  OUT  * line 91 of /lib/behat/classes/util.php: call to install_cli_database()
  OUT  * line 162 of /admin/tool/behat/cli/util_single_run.php: call to behat_util::install_site()
  OUT   !!
  OUT  
  RES  1 Command did not run successfully
  RUN  php -d log_errors=1 -d error_log=NULL /home/runner/work/moodle-plugin-ci/moodle-plugin-ci/moodle/admin/tool/phpunit/cli/util.php --install
  OUT  -->System
jpahullo commented 3 years ago

on lib/ddl/sql_generator.php:229 is:

 229         if ($this->temptables->is_temptable($tablename)) {
 230             return true;
 231         }

and $this->temptables can be null, as it is instantiated. So, maybe this is a bug to solve in Moodle core?

jpahullo commented 3 years ago

The error makes fail the step, even though Moodle is installed properly.

How is it supposed to proceed?

scara commented 3 years ago

Hi @jpahullo, I'd test the same Moodle core i.e branch MOODLE_311_STABLE using https://github.com/moodlehq/moodle-docker, locally to you machine (MOODLE_DOCKER_DB=oracle, MOODLE_DOCKER_PHP_VERSION=7.4) to exclude any local issue but a Moodle code one, when running on Oracle.

I doubt there is an issue when installing Moodle in Oracle or launching units but... who knows?

At a quick glance, wondering if the issue is in just the Behat install i.e. you should test with the tool above a Behat run under Oracle:

[info] Starting install
[info] Cloning Moodle
...
[info] Moodle assets
[debug] Creating Moodle data directories
...
[debug] Create Moodle database
...
[debug] Creating Moodle's config file
[debug] <?php // Moodle configuration file
...
[info] Install plugins
...
[info] Installing local_ci
[info] Copying plugin from /home/runner/work/moodle-plugin-ci/moodle-local_ci to /home/runner/work/moodle-plugin-ci/moodle-plugin-ci/moodle/local/ci
[debug] Created config file at /home/runner/work/moodle-plugin-ci/moodle-plugin-ci/moodle/local/ci/.moodle-plugin-ci.yml
...
[info] Install global dependencies
...
[info] Install npm dependencies
...
[info] Initialize test suite
  RES  Command ran successfully
...
  RUN  php -d log_errors=1 -d error_log=NULL /home/runner/work/moodle-plugin-ci/moodle-plugin-ci/moodle/admin/tool/behat/cli/util_single_run.php --install
  ERR  Default exception handler: Exception - Call to a member function is_temptable() on null Debug: 

HTH, Matteo

jpahullo commented 3 years ago

Hi @scara !

I created a patch for the tracker's issue. The {{$this->temptables}} from sql_generator.php can be null, so I think it must be checked if it is null, bypass it.

I will try to run it locally and check if the error is reproduced, either installing Moodle, phpunit tables or behat tables.

Thanks!

scara commented 3 years ago

Hi @jpahullo, thanks! I'm not completely sold on that check: I mean, it's sane but I wonder if that null comes from running Behat on Oracle, which could be broken for other reasons.

For the reader convenience, this is the Tracker ref: MDL-72318.

HTH, Matteo

jpahullo commented 3 years ago

Hi!

I'm finding that local in my computer I cannot build the oracle db instance.

I'm using the latest version of moodle-docker and the master branch from moodle.

The logs of the container oracle db shows this:

$ docker logs -f moodledocker_db_1 
Starting Oracle Net Listener.
Starting Oracle Database 11g Express Edition instance.

ERROR:
ORA-12547: TNS:lost contact

SP2-0306: Invalid option.
Usage: CONN[ECT] [{logon|/|proxy} [AS {SYSDBA|SYSOPER|SYSASM}] [edition=value]]
where <logon> ::= <username>[/<password>][@<connect_identifier>]
      <proxy> ::= <proxyuser>[<username>][/<password>][@<connect_identifier>]
ERROR:
ORA-12547: TNS:lost contact

SP2-0306: Invalid option.
Usage: CONN[ECT] [{logon|/|proxy} [AS {SYSDBA|SYSOPER|SYSASM}] [edition=value]]
where <logon> ::= <username>[/<password>][@<connect_identifier>]
      <proxy> ::= <proxyuser>[<username>][/<password>][@<connect_identifier>]
Shutting down Oracle Database 11g Express Edition instance.
Stopping Oracle Net Listener.

Starting Oracle Net Listener.
Starting Oracle Database 11g Express Edition instance.

/usr/sbin/startup.sh: running /docker-entrypoint-initdb.d/01-moodle-user.sql

SQL*Plus: Release 11.2.0.2.0 Production on Thu Aug 12 08:45:46 2021

Copyright (c) 1982, 2011, Oracle.  All rights reserved.

ERROR:
ORA-12547: TNS:lost contact

Enter user-name: Enter password: 
ERROR:
ORA-12547: TNS:lost contact

Enter user-name: 

Starting Oracle Net Listener.
Starting Oracle Database 11g Express Edition instance.

ERROR:
ORA-12547: TNS:lost contact

SP2-0306: Invalid option.
Usage: CONN[ECT] [{logon|/|proxy} [AS {SYSDBA|SYSOPER|SYSASM}] [edition=value]]
where <logon> ::= <username>[/<password>][@<connect_identifier>]
      <proxy> ::= <proxyuser>[<username>][/<password>][@<connect_identifier>]
ERROR:
ORA-12547: TNS:lost contact

SP2-0306: Invalid option.
Usage: CONN[ECT] [{logon|/|proxy} [AS {SYSDBA|SYSOPER|SYSASM}] [edition=value]]
where <logon> ::= <username>[/<password>][@<connect_identifier>]
      <proxy> ::= <proxyuser>[<username>][/<password>][@<connect_identifier>]
Shutting down Oracle Database 11g Express Edition instance.
Stopping Oracle Net Listener.

Starting Oracle Net Listener.
Starting Oracle Database 11g Express Edition instance.

/usr/sbin/startup.sh: running /docker-entrypoint-initdb.d/01-moodle-user.sql

SQL*Plus: Release 11.2.0.2.0 Production on Thu Aug 12 08:51:22 2021

Copyright (c) 1982, 2011, Oracle.  All rights reserved.

ERROR:
ORA-12547: TNS:lost contact

Enter user-name: Enter password: 
ERROR:
ORA-12547: TNS:lost contact

Enter user-name: 

And the checker shows again and again Waiting for oracle to come up....

I'm using this settings:

MOODLE_DOCKER_WWWROOT=/path/to/moodle.org/moodle
MOODLE_DOCKER_WEB_PORT=8000
MOODLE_DOCKER_DB=oracle
MOODLE_DOCKER_PHP_VERSION=7.4

And the containers shows this:

$ docker ps
CONTAINER ID        IMAGE                                COMMAND                  CREATED             STATUS              PORTS                        NAMES
bd1a395eeb82        moodlehq/moodle-php-apache:7.3       "docker-php-entrypoi…"   13 minutes ago      Up 13 minutes       127.0.0.1:8000->80/tcp       moodledocker_webserver_1
bb1b8d09405d        moodlehq/moodle-db-oracle-r2         "/bin/sh -c '/usr/sb…"   13 minutes ago      Up 8 minutes        22/tcp, 1521/tcp, 8080/tcp   moodledocker_db_1
80e50ad9c101        mailhog/mailhog                      "MailHog"                13 minutes ago      Up 13 minutes       1025/tcp, 8025/tcp           moodledocker_mailhog_1
828a77f2c355        moodlehq/moodle-exttests             "docker-php-entrypoi…"   13 minutes ago      Up 13 minutes       80/tcp                       moodledocker_exttests_1
a432fd8974df        selenium/standalone-firefox:2.53.1   "/opt/bin/entry_poin…"   13 minutes ago      Up 13 minutes       4444/tcp                     moodledocker_selenium_1

Any suggestion?

jpahullo commented 3 years ago

Checked that I'm using the latest moodlehq/moodle-db-oracle image

jpahullo commented 3 years ago

I stopped and removed all containers and built them again, with the same result.

jpahullo commented 3 years ago

Entering to the oracle db container, I cannot login into db with the sqlplus, like sqlplus system/oracle as sysdba. Any combination fails to log in, using credentials from https://github.com/wnameless/docker-oracle-xe-11g.

jpahullo commented 3 years ago

Removing local docker image and trying again. I'm trying individual commands from startup.sh from moodlehq/moodle-db-oracle and they didn't work from command line inside the oracle container

paulholden commented 3 years ago

@jpahullo - I'm just confirming that Oracle with PHP7.4 tests do work locally using unmodified Moodle tools/source:

$ export -p | grep MOODLE_DOCKER
declare -x MOODLE_DOCKER_DB="oracle"
declare -x MOODLE_DOCKER_PHP_VERSION="7.4"
declare -x MOODLE_DOCKER_SELENIUM_VNC_PORT="54321"
declare -x MOODLE_DOCKER_WWWROOT="/opt/moodle/master/src"
$ docker ps
CONTAINER ID        IMAGE                                      COMMAND                  CREATED             STATUS              PORTS                                 NAMES
07063bd99166        moodlehq/moodle-php-apache:7.4             "docker-php-entrypoi…"   21 minutes ago      Up 21 minutes       127.0.0.1:8000->80/tcp                docker_webserver_1
017d11157b13        selenium/standalone-firefox-debug:2.53.1   "/opt/bin/entry_poin…"   21 minutes ago      Up 21 minutes       4444/tcp, 127.0.0.1:54321->5900/tcp   docker_selenium_1
99a09014f516        moodlehq/moodle-db-oracle-r2               "/bin/sh -c '/usr/sb…"   21 minutes ago      Up 21 minutes       22/tcp, 1521/tcp, 8080/tcp            docker_db_1
49364d8689d5        moodlehq/moodle-exttests                   "docker-php-entrypoi…"   21 minutes ago      Up 21 minutes       80/tcp                                docker_exttests_1
9fd9edcf031e        mailhog/mailhog                            "MailHog"                21 minutes ago      Up 21 minutes       1025/tcp, 8025/tcp                    docker_mailhog_1
$ bin/moodle-docker-compose exec webserver phpdbg -qrr vendor/bin/phpunit --filter test_map_userinfo_to_fields
Moodle 4.0dev (Build: 20210805)
Php: 7.4.21, oci: 11.2.0.2.0, OS: Linux 4.15.0-142-generic x86_64
PHPUnit 9.5.4 by Sebastian Bergmann and contributors.

....                                                                4 / 4 (100%)

Time: 00:00.632, Memory: 599.00 MB

OK (4 tests, 8 assertions)
$ bin/moodle-docker-compose exec --user www-data webserver php admin/tool/behat/cli/run.php --name="When you choose custom fields, these should be displayed in the 'Participants' screen"
Running single behat site:
Moodle 4.0dev (Build: 20210805)
Php: 7.4.21, oci: 11.2.0.2.0, OS: Linux 4.15.0-142-generic x86_64
Run optional tests:
- Accessibility: No
Server OS "Linux", Browser: "firefox"
Started at 12-08-2021, 17:49
.........

1 scenario (1 passed)
9 steps (9 passed)
0m9.50s (52.97Mb)

I agree with @scara - this doesn't seem like it should require any changes elsewhere, so the error is likely somewhere in the changes proposed here

jpahullo commented 3 years ago

No success. Still failing. I open an issue on the moodlehq/moodle-db-oracle.

jpahullo commented 3 years ago

Ups! Thanks for the info @paulholden. Incredible.

If you do docker images, which is the image id for the oracle? Mine is this:

moodlehq/moodle-db-oracle-r2 latest cbccc731cb4a 7 months ago 2.1GB

jpahullo commented 3 years ago

In addition, please, @paulholden, do you think you could provide us the logs for the Moodle installation for phpunit tests and behat tests? I think tests inside the moodle-plugin-ci would pass, but it fails because of that exception about invoking a method on null. I mean, the problem could appear only during the behat iinitialization or phpunit initialization of their db tables. Thanks in advance.

scara commented 3 years ago

Hi @jpahullo,

moodlehq/moodle-db-oracle-r2 latest cbccc731cb4a 7 months ago 2.1GB

On my Docker Engine:

$ docker pull moodlehq/moodle-db-oracle-r2
Using default tag: latest
latest: Pulling from moodlehq/moodle-db-oracle-r2
5667fdb72017: Pull complete
d83811f270d5: Pull complete
ee671aafb583: Pull complete
7fc152dfb3a6: Pull complete
51896e240a72: Pull complete
64e16b57ee0a: Pull complete
18e53bbb289b: Pull complete
Digest: sha256:dbcdb20e1919abb180235fd0d3d30998de58de116bdcaf955d2e169de2700dfb
Status: Downloaded newer image for moodlehq/moodle-db-oracle-r2:latest
docker.io/moodlehq/moodle-db-oracle-r2:latest
$ docker images | grep oracle
moodlehq/moodle-db-oracle-r2     latest                    cbccc731cb4a   7 months ago    2.1GB

I'll give it a try on my side within this day.

HTH, Matteo

scara commented 3 years ago

Hi @jpahullo, back again, I've run the Behat setup using https://github.com/moodlehq/moodle-docker:

Click here to see the console output when running the Behat init on a fresh clone of MOODLE_311_STABLE
# export MOODLE_DOCKER_WWWROOT=/path/to/MOODLE_311_STABLE/
# export MOODLE_DOCKER_DB=oracle
# export MOODLE_DOCKER_PHP_VERSION=7.4
# cp config.docker-template.php $MOODLE_DOCKER_WWWROOT/config.php
# bin/moodle-docker-compose up -d
Creating network "moodle-docker_default" with the default driver
Pulling exttests (moodlehq/moodle-exttests:)...
latest: Pulling from moodlehq/moodle-exttests
000eee12ec04: Pull complete
8ae4f9fcfeea: Pull complete
60f22fbbd07a: Pull complete
ccc7a63ad75f: Pull complete
a2427b8dd6e7: Pull complete
91cac3b30184: Pull complete
d6e40015fc10: Pull complete
54695fdb10a7: Pull complete
500ca11be45f: Pull complete
86b2805859cf: Pull complete
c61685fa4f4f: Pull complete
0bf989f9dbbb: Pull complete
01848ea209b5: Pull complete
0f6a22a6d1b5: Pull complete
Digest: sha256:72be6bc970756127610cae7fc3e31d27a2a6041e02245cb1a2961f70ea5e58b8
Status: Downloaded newer image for moodlehq/moodle-exttests:latest
Creating moodle-docker_db_1       ... done
Creating moodle-docker_mailhog_1  ... done
Creating moodle-docker_exttests_1 ... done
Creating moodle-docker_selenium_1 ... done
Creating moodle-docker_webserver_1 ... done
# bin/moodle-docker-wait-for-db
Waiting for oracle to come up...
Waiting for oracle to come up...
# bin/moodle-docker-compose exec webserver php admin/tool/behat/cli/init.php
Installing dependencies from lock file (including require-dev)
Verifying lock file contents can be installed on current platform.
Package operations: 76 installs, 0 updates, 0 removals
  - Downloading behat/gherkin (v4.8.0)
  - Downloading symfony/polyfill-mbstring (v1.22.1)
  - Downloading symfony/polyfill-ctype (v1.22.1)
  - Downloading symfony/dom-crawler (v4.4.24)
  - Downloading symfony/browser-kit (v4.4.24)
  - Downloading symfony/css-selector (v5.2.9)
  - Downloading behat/mink (v1.8.1)
  - Downloading behat/mink-browserkit-driver (v1.3.4)
  - Downloading behat/transliterator (v1.3.0)
  - Downloading symfony/polyfill-php72 (v1.22.1)
  - Downloading symfony/polyfill-intl-normalizer (v1.22.1)
  - Downloading symfony/polyfill-intl-idn (v1.22.1)
  - Downloading ralouphie/getallheaders (3.0.3)
  - Downloading psr/http-message (1.0.1)
  - Downloading guzzlehttp/psr7 (1.8.2)
  - Downloading guzzlehttp/promises (1.4.1)
  - Downloading guzzlehttp/guzzle (6.5.5)
  - Downloading fabpot/goutte (v3.3.1)
  - Downloading mikey179/vfsstream (v1.6.8)
  - Downloading symfony/polyfill-php80 (v1.22.1)
  - Downloading symfony/process (v5.2.7)
  - Downloading php-webdriver/webdriver (1.11.0)
  - Downloading oleg-andreyev/mink-phpwebdriver (v1.0.1)
  - Downloading symfony/filesystem (v5.2.7)
  - Downloading symfony/deprecation-contracts (v2.4.0)
  - Downloading symfony/config (v5.2.8)
  - Downloading symfony/yaml (v5.2.9)
  - Downloading symfony/translation-contracts (v2.4.0)
  - Downloading symfony/translation (v5.2.9)
  - Downloading psr/event-dispatcher (1.0.0)
  - Downloading symfony/event-dispatcher-contracts (v2.4.0)
  - Downloading symfony/event-dispatcher (v5.2.4)
  - Downloading psr/container (1.1.1)
  - Downloading symfony/service-contracts (v2.4.0)
  - Downloading symfony/dependency-injection (v5.2.9)
  - Downloading symfony/polyfill-intl-grapheme (v1.22.1)
  - Downloading symfony/string (v5.2.8)
  - Downloading symfony/polyfill-php73 (v1.22.1)
  - Downloading symfony/console (v5.2.8)
  - Downloading behat/behat (v3.8.1)
  - Downloading friends-of-behat/mink-extension (dev-master 586ffcc)
  - Downloading behat/mink-goutte-driver (v1.2.1)
  - Downloading moodlehq/behat-extension (v3.400.5)
  - Downloading webmozart/assert (1.10.0)
  - Downloading phpdocumentor/reflection-common (2.2.0)
  - Downloading phpdocumentor/type-resolver (1.4.0)
  - Downloading phpdocumentor/reflection-docblock (5.2.2)
  - Downloading sebastian/version (3.0.2)
  - Downloading sebastian/type (2.3.1)
  - Downloading sebastian/resource-operations (3.0.3)
  - Downloading sebastian/recursion-context (4.0.4)
  - Downloading sebastian/object-reflector (2.0.4)
  - Downloading sebastian/object-enumerator (4.0.4)
  - Downloading sebastian/global-state (5.0.2)
  - Downloading sebastian/exporter (4.0.3)
  - Downloading sebastian/environment (5.1.3)
  - Downloading sebastian/diff (4.0.4)
  - Downloading sebastian/comparator (4.0.6)
  - Downloading sebastian/code-unit (1.0.8)
  - Downloading sebastian/cli-parser (1.0.1)
  - Downloading phpunit/php-timer (5.0.3)
  - Downloading phpunit/php-text-template (2.0.4)
  - Downloading phpunit/php-invoker (3.1.1)
  - Downloading phpunit/php-file-iterator (3.0.5)
  - Downloading theseer/tokenizer (1.2.0)
  - Downloading nikic/php-parser (v4.10.5)
  - Downloading sebastian/lines-of-code (1.0.3)
  - Downloading sebastian/complexity (2.0.2)
  - Downloading sebastian/code-unit-reverse-lookup (2.0.3)
  - Downloading phpunit/php-code-coverage (9.2.6)
  - Downloading doctrine/instantiator (1.4.0)
  - Downloading phpspec/prophecy (1.13.0)
  - Downloading phar-io/version (3.1.0)
  - Downloading phar-io/manifest (2.0.1)
  - Downloading myclabs/deep-copy (1.10.2)
  - Downloading phpunit/phpunit (9.5.4)
  0/76 [>---------------------------]   0%
  6/76 [==>-------------------------]   7%
 10/76 [===>------------------------]  13%
 16/76 [=====>----------------------]  21%
 21/76 [=======>--------------------]  27%
 27/76 [=========>------------------]  35%
 30/76 [===========>----------------]  39%
 35/76 [============>---------------]  46%
 40/76 [==============>-------------]  52%
 45/76 [================>-----------]  59%
 55/76 [====================>-------]  72%
 59/76 [=====================>------]  77%
 69/76 [=========================>--]  90%
 75/76 [===========================>]  98%
 76/76 [============================] 100%
  - Installing behat/gherkin (v4.8.0): Extracting archive
  - Installing symfony/polyfill-mbstring (v1.22.1): Extracting archive
  - Installing symfony/polyfill-ctype (v1.22.1): Extracting archive
  - Installing symfony/dom-crawler (v4.4.24): Extracting archive
  - Installing symfony/browser-kit (v4.4.24): Extracting archive
  - Installing symfony/css-selector (v5.2.9): Extracting archive
  - Installing behat/mink (v1.8.1): Extracting archive
  - Installing behat/mink-browserkit-driver (v1.3.4): Extracting archive
  - Installing behat/transliterator (v1.3.0): Extracting archive
  - Installing symfony/polyfill-php72 (v1.22.1): Extracting archive
  - Installing symfony/polyfill-intl-normalizer (v1.22.1): Extracting archive
  - Installing symfony/polyfill-intl-idn (v1.22.1): Extracting archive
  - Installing ralouphie/getallheaders (3.0.3): Extracting archive
  - Installing psr/http-message (1.0.1): Extracting archive
  - Installing guzzlehttp/psr7 (1.8.2): Extracting archive
  - Installing guzzlehttp/promises (1.4.1): Extracting archive
  - Installing guzzlehttp/guzzle (6.5.5): Extracting archive
  - Installing fabpot/goutte (v3.3.1): Extracting archive
  - Installing mikey179/vfsstream (v1.6.8): Extracting archive
  - Installing symfony/polyfill-php80 (v1.22.1): Extracting archive
  - Installing symfony/process (v5.2.7): Extracting archive
  - Installing php-webdriver/webdriver (1.11.0): Extracting archive
  - Installing oleg-andreyev/mink-phpwebdriver (v1.0.1): Extracting archive
  - Installing symfony/filesystem (v5.2.7): Extracting archive
  - Installing symfony/deprecation-contracts (v2.4.0): Extracting archive
  - Installing symfony/config (v5.2.8): Extracting archive
  - Installing symfony/yaml (v5.2.9): Extracting archive
  - Installing symfony/translation-contracts (v2.4.0): Extracting archive
  - Installing symfony/translation (v5.2.9): Extracting archive
  - Installing psr/event-dispatcher (1.0.0): Extracting archive
  - Installing symfony/event-dispatcher-contracts (v2.4.0): Extracting archive
  - Installing symfony/event-dispatcher (v5.2.4): Extracting archive
  - Installing psr/container (1.1.1): Extracting archive
  - Installing symfony/service-contracts (v2.4.0): Extracting archive
  - Installing symfony/dependency-injection (v5.2.9): Extracting archive
  - Installing symfony/polyfill-intl-grapheme (v1.22.1): Extracting archive
  - Installing symfony/string (v5.2.8): Extracting archive
  - Installing symfony/polyfill-php73 (v1.22.1): Extracting archive
  - Installing symfony/console (v5.2.8): Extracting archive
  - Installing behat/behat (v3.8.1): Extracting archive
  - Installing friends-of-behat/mink-extension (dev-master 586ffcc): Extracting archive
  - Installing behat/mink-goutte-driver (v1.2.1): Extracting archive
  - Installing moodlehq/behat-extension (v3.400.5): Extracting archive
  - Installing webmozart/assert (1.10.0): Extracting archive
  - Installing phpdocumentor/reflection-common (2.2.0): Extracting archive
  - Installing phpdocumentor/type-resolver (1.4.0): Extracting archive
  - Installing phpdocumentor/reflection-docblock (5.2.2): Extracting archive
  - Installing sebastian/version (3.0.2): Extracting archive
  - Installing sebastian/type (2.3.1): Extracting archive
  - Installing sebastian/resource-operations (3.0.3): Extracting archive
  - Installing sebastian/recursion-context (4.0.4): Extracting archive
  - Installing sebastian/object-reflector (2.0.4): Extracting archive
  - Installing sebastian/object-enumerator (4.0.4): Extracting archive
  - Installing sebastian/global-state (5.0.2): Extracting archive
  - Installing sebastian/exporter (4.0.3): Extracting archive
  - Installing sebastian/environment (5.1.3): Extracting archive
  - Installing sebastian/diff (4.0.4): Extracting archive
  - Installing sebastian/comparator (4.0.6): Extracting archive
  - Installing sebastian/code-unit (1.0.8): Extracting archive
  - Installing sebastian/cli-parser (1.0.1): Extracting archive
  - Installing phpunit/php-timer (5.0.3): Extracting archive
  - Installing phpunit/php-text-template (2.0.4): Extracting archive
  - Installing phpunit/php-invoker (3.1.1): Extracting archive
  - Installing phpunit/php-file-iterator (3.0.5): Extracting archive
  - Installing theseer/tokenizer (1.2.0): Extracting archive
  - Installing nikic/php-parser (v4.10.5): Extracting archive
  - Installing sebastian/lines-of-code (1.0.3): Extracting archive
  - Installing sebastian/complexity (2.0.2): Extracting archive
  - Installing sebastian/code-unit-reverse-lookup (2.0.3): Extracting archive
  - Installing phpunit/php-code-coverage (9.2.6): Extracting archive
  - Installing doctrine/instantiator (1.4.0): Extracting archive
  - Installing phpspec/prophecy (1.13.0): Extracting archive
  - Installing phar-io/version (3.1.0): Extracting archive
  - Installing phar-io/manifest (2.0.1): Extracting archive
  - Installing myclabs/deep-copy (1.10.2): Extracting archive
  - Installing phpunit/phpunit (9.5.4): Extracting archive
  0/76 [>---------------------------]   0%
 10/76 [===>------------------------]  13%
 29/76 [==========>-----------------]  38%
 46/76 [================>-----------]  60%
 59/76 [=====================>------]  77%
 76/76 [============================] 100%
Generating autoload files
49 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
-->System
++ Success ++
-->antivirus_clamav
++ Success ++
-->availability_completion
++ Success ++
-->availability_date
++ Success ++
-->availability_grade
++ Success ++
-->availability_group
++ Success ++
-->availability_grouping
++ Success ++
-->availability_profile
++ Success ++
-->qtype_calculated
++ Success ++
-->qtype_calculatedmulti
++ Success ++
-->qtype_calculatedsimple
++ Success ++
-->qtype_ddimageortext
++ Success ++
-->qtype_ddmarker
++ Success ++
-->qtype_ddwtos
++ Success ++
-->qtype_description
++ Success ++
-->qtype_essay
++ Success ++
-->qtype_gapselect
++ Success ++
-->qtype_match
++ Success ++
-->qtype_missingtype
++ Success ++
-->qtype_multianswer
++ Success ++
-->qtype_multichoice
++ Success ++
-->qtype_numerical
++ Success ++
-->qtype_random
++ Success ++
-->qtype_randomsamatch
++ Success ++
-->qtype_shortanswer
++ Success ++
-->qtype_truefalse
++ Success ++
-->mod_assign
++ Success ++
-->mod_assignment
++ Success ++
-->mod_book
++ Success ++
-->mod_chat
++ Success ++
-->mod_choice
++ Success ++
-->mod_data
++ Success ++
-->mod_feedback
++ Success ++
-->mod_folder
++ Success ++
-->mod_forum
++ Success ++
-->mod_glossary
++ Success ++
-->mod_h5pactivity
++ Success ++
-->mod_imscp
++ Success ++
-->mod_label
++ Success ++
-->mod_lesson
++ Success ++
-->mod_lti
++ Success ++
-->mod_page
++ Success ++
-->mod_quiz
++ Success ++
-->mod_resource
++ Success ++
-->mod_scorm
++ Success ++
-->mod_survey
++ Success ++
-->mod_url
++ Success ++
-->mod_wiki
++ Success ++
-->mod_workshop
++ Success ++
-->auth_cas
++ Success ++
-->auth_db
++ Success ++
-->auth_email
++ Success ++
-->auth_ldap
++ Success ++
-->auth_lti
++ Success ++
-->auth_manual
++ Success ++
-->auth_mnet
++ Success ++
-->auth_nologin
++ Success ++
-->auth_none
++ Success ++
-->auth_oauth2
++ Success ++
-->auth_shibboleth
++ Success ++
-->auth_webservice
++ Success ++
-->calendartype_gregorian
++ Success ++
-->customfield_checkbox
++ Success ++
-->customfield_date
++ Success ++
-->customfield_select
++ Success ++
-->customfield_text
++ Success ++
-->customfield_textarea
++ Success ++
-->enrol_category
++ Success ++
-->enrol_cohort
++ Success ++
-->enrol_database
++ Success ++
-->enrol_fee
++ Success ++
-->enrol_flatfile
++ Success ++
-->enrol_guest
++ Success ++
-->enrol_imsenterprise
++ Success ++
-->enrol_ldap
++ Success ++
-->enrol_lti
++ Success ++
-->enrol_manual
++ Success ++
-->enrol_meta
++ Success ++
-->enrol_mnet
++ Success ++
-->enrol_paypal
++ Success ++
-->enrol_self
++ Success ++
-->message_airnotifier
++ Success ++
-->message_email
++ Success ++
-->message_jabber
++ Success ++
-->message_popup
++ Success ++
-->block_accessreview
++ Success ++
-->block_activity_modules
++ Success ++
-->block_activity_results
++ Success ++
-->block_admin_bookmarks
++ Success ++
-->block_badges
++ Success ++
-->block_blog_menu
++ Success ++
-->block_blog_recent
++ Success ++
-->block_blog_tags
++ Success ++
-->block_calendar_month
++ Success ++
-->block_calendar_upcoming
++ Success ++
-->block_comments
++ Success ++
-->block_completionstatus
++ Success ++
-->block_course_list
++ Success ++
-->block_course_summary
++ Success ++
-->block_feedback
++ Success ++
-->block_globalsearch
++ Success ++
-->block_glossary_random
++ Success ++
-->block_html
++ Success ++
-->block_login
++ Success ++
-->block_lp
++ Success ++
-->block_mentees
++ Success ++
-->block_mnet_hosts
++ Success ++
-->block_myoverview
++ Success ++
-->block_myprofile
++ Success ++
-->block_navigation
++ Success ++
-->block_news_items
++ Success ++
-->block_online_users
++ Success ++
-->block_private_files
++ Success ++
-->block_quiz_results
++ Success ++
-->block_recent_activity
++ Success ++
-->block_recentlyaccessedcourses
++ Success ++
-->block_recentlyaccesseditems
++ Success ++
-->block_rss_client
++ Success ++
-->block_search_forums
++ Success ++
-->block_section_links
++ Success ++
-->block_selfcompletion
++ Success ++
-->block_settings
++ Success ++
-->block_site_main_menu
++ Success ++
-->block_social_activities
++ Success ++
-->block_starredcourses
++ Success ++
-->block_tag_flickr
++ Success ++
-->block_tag_youtube
++ Success ++
-->block_tags
++ Success ++
-->block_timeline
++ Success ++
-->media_html5audio
++ Success ++
-->media_html5video
++ Success ++
-->media_swf
++ Success ++
-->media_videojs
++ Success ++
-->media_vimeo
++ Success ++
-->media_youtube
++ Success ++
-->filter_activitynames
++ Success ++
-->filter_algebra
++ Success ++
-->filter_censor
++ Success ++
-->filter_data
++ Success ++
-->filter_displayh5p
++ Success ++
-->filter_emailprotect
++ Success ++
-->filter_emoticon
++ Success ++
-->filter_glossary
++ Success ++
-->filter_mathjaxloader
++ Success ++
-->filter_mediaplugin
++ Success ++
-->filter_multilang
++ Success ++
-->filter_tex
++ Success ++
-->filter_tidy
++ Success ++
-->filter_urltolink
++ Success ++
-->editor_atto
++ Success ++
-->editor_textarea
++ Success ++
-->editor_tinymce
++ Success ++
-->format_singleactivity
++ Success ++
-->format_social
++ Success ++
-->format_topics
++ Success ++
-->format_weeks
++ Success ++
-->dataformat_csv
++ Success ++
-->dataformat_excel
++ Success ++
-->dataformat_html
++ Success ++
-->dataformat_json
++ Success ++
-->dataformat_ods
++ Success ++
-->dataformat_pdf
++ Success ++
-->profilefield_checkbox
++ Success ++
-->profilefield_datetime
++ Success ++
-->profilefield_menu
++ Success ++
-->profilefield_social
++ Success ++
-->profilefield_text
++ Success ++
-->profilefield_textarea
++ Success ++
-->report_backups
++ Success ++
-->report_competency
++ Success ++
-->report_completion
++ Success ++
-->report_configlog
++ Success ++
-->report_courseoverview
++ Success ++
-->report_eventlist
++ Success ++
-->report_infectedfiles
++ Success ++
-->report_insights
++ Success ++
-->report_log
++ Success ++
-->report_loglive
++ Success ++
-->report_outline
++ Success ++
-->report_participation
++ Success ++
-->report_performance
++ Success ++
-->report_progress
++ Success ++
-->report_questioninstances
++ Success ++
-->report_security
++ Success ++
-->report_stats
++ Success ++
-->report_status
++ Success ++
-->report_usersessions
++ Success ++
-->gradeexport_ods
++ Success ++
-->gradeexport_txt
++ Success ++
-->gradeexport_xls
++ Success ++
-->gradeexport_xml
++ Success ++
-->gradeimport_csv
++ Success ++
-->gradeimport_direct
++ Success ++
-->gradeimport_xml
++ Success ++
-->gradereport_grader
++ Success ++
-->gradereport_history
++ Success ++
-->gradereport_outcomes
++ Success ++
-->gradereport_overview
++ Success ++
-->gradereport_singleview
++ Success ++
-->gradereport_user
++ Success ++
-->gradingform_guide
++ Success ++
-->gradingform_rubric
++ Success ++
-->mlbackend_php
++ Success ++
-->mlbackend_python
++ Success ++
-->mnetservice_enrol
++ Success ++
-->webservice_rest
++ Success ++
-->webservice_soap
++ Success ++
-->webservice_xmlrpc
++ Success ++
-->repository_areafiles
++ Success ++
-->repository_boxnet
++ Success ++
-->repository_contentbank
++ Success ++
-->repository_coursefiles
++ Success ++
-->repository_dropbox
++ Success ++
-->repository_equella
++ Success ++
-->repository_filesystem
++ Success ++
-->repository_flickr
++ Success ++
-->repository_flickr_public
++ Success ++
-->repository_googledocs
++ Success ++
-->repository_local
++ Success ++
-->repository_merlot
++ Success ++
-->repository_nextcloud
++ Success ++
-->repository_onedrive
++ Success ++
-->repository_picasa
++ Success ++
-->repository_recent
++ Success ++
-->repository_s3
++ Success ++
-->repository_skydrive
++ Success ++
-->repository_upload
++ Success ++
-->repository_url
++ Success ++
-->repository_user
++ Success ++
-->repository_webdav
++ Success ++
-->repository_wikimedia
++ Success ++
-->repository_youtube
++ Success ++
-->portfolio_boxnet
++ Success ++
-->portfolio_download
++ Success ++
-->portfolio_flickr
++ Success ++
-->portfolio_googledocs
++ Success ++
-->portfolio_mahara
++ Success ++
-->portfolio_picasa
++ Success ++
-->search_simpledb
++ Success ++
-->search_solr
++ Success ++
-->qbehaviour_adaptive
++ Success ++
-->qbehaviour_adaptivenopenalty
++ Success ++
-->qbehaviour_deferredcbm
++ Success ++
-->qbehaviour_deferredfeedback
++ Success ++
-->qbehaviour_immediatecbm
++ Success ++
-->qbehaviour_immediatefeedback
++ Success ++
-->qbehaviour_informationitem
++ Success ++
-->qbehaviour_interactive
++ Success ++
-->qbehaviour_interactivecountback
++ Success ++
-->qbehaviour_manualgraded
++ Success ++
-->qbehaviour_missing
++ Success ++
-->qformat_aiken
++ Success ++
-->qformat_blackboard_six
++ Success ++
-->qformat_examview
++ Success ++
-->qformat_gift
++ Success ++
-->qformat_missingword
++ Success ++
-->qformat_multianswer
++ Success ++
-->qformat_webct
++ Success ++
-->qformat_xhtml
++ Success ++
-->qformat_xml
++ Success ++
-->tool_analytics
++ Success ++
-->tool_availabilityconditions
++ Success ++
-->tool_behat
++ Success ++
-->tool_brickfield
++ Success ++
-->tool_capability
++ Success ++
-->tool_cohortroles
++ Success ++
-->tool_componentlibrary
++ Success ++
-->tool_customlang
++ Success ++
-->tool_dataprivacy
++ Success ++
-->tool_dbtransfer
++ Success ++
-->tool_filetypes
++ Success ++
-->tool_generator
++ Success ++
-->tool_health
++ Success ++
-->tool_httpsreplace
++ Success ++
-->tool_innodb
++ Success ++
-->tool_installaddon
++ Success ++
-->tool_langimport
++ Success ++
-->tool_licensemanager
++ Success ++
-->tool_log
++ Success ++
-->tool_lp
++ Success ++
-->tool_lpimportcsv
++ Success ++
-->tool_lpmigrate
++ Success ++
-->tool_messageinbound
++ Success ++
-->tool_mobile
++ Success ++
-->tool_monitor
++ Success ++
-->tool_moodlenet
++ Success ++
-->tool_multilangupgrade
++ Success ++
-->tool_oauth2
++ Success ++
-->tool_phpunit
++ Success ++
-->tool_policy
++ Success ++
-->tool_profiling
++ Success ++
-->tool_recyclebin
++ Success ++
-->tool_replace
++ Success ++
-->tool_spamcleaner
++ Success ++
-->tool_task
++ Success ++
-->tool_templatelibrary
++ Success ++
-->tool_unsuproles
++ Success ++
-->tool_uploadcourse
++ Success ++
-->tool_uploaduser
++ Success ++
-->tool_usertours
++ Success ++
-->tool_xmldb
++ Success ++
-->cachestore_apcu
++ Success ++
-->cachestore_file
++ Success ++
-->cachestore_memcached
++ Success ++
-->cachestore_mongodb
++ Success ++
-->cachestore_redis
++ Success ++
-->cachestore_session
++ Success ++
-->cachestore_static
++ Success ++
-->cachelock_file
++ Success ++
-->fileconverter_googledrive
++ Success ++
-->fileconverter_unoconv
++ Success ++
-->contenttype_h5p
++ Success ++
-->theme_boost
++ Success ++
-->theme_classic
++ Success ++
-->h5plib_v124
++ Success ++
-->paygw_paypal
++ Success ++
-->assignsubmission_comments
++ Success ++
-->assignsubmission_file
++ Success ++
-->assignsubmission_onlinetext
++ Success ++
-->assignfeedback_comments
++ Success ++
-->assignfeedback_editpdf
++ Success ++
-->assignfeedback_file
++ Success ++
-->assignfeedback_offline
++ Success ++
-->assignment_offline
++ Success ++
-->assignment_online
++ Success ++
-->assignment_upload
++ Success ++
-->assignment_uploadsingle
++ Success ++
-->booktool_exportimscp
++ Success ++
-->booktool_importhtml
++ Success ++
-->booktool_print
++ Success ++
-->datafield_checkbox
++ Success ++
-->datafield_date
++ Success ++
-->datafield_file
++ Success ++
-->datafield_latlong
++ Success ++
-->datafield_menu
++ Success ++
-->datafield_multimenu
++ Success ++
-->datafield_number
++ Success ++
-->datafield_picture
++ Success ++
-->datafield_radiobutton
++ Success ++
-->datafield_text
++ Success ++
-->datafield_textarea
++ Success ++
-->datafield_url
++ Success ++
-->datapreset_imagegallery
++ Success ++
-->forumreport_summary
++ Success ++
-->ltiservice_basicoutcomes
++ Success ++
-->ltiservice_gradebookservices
++ Success ++
-->ltiservice_memberships
++ Success ++
-->ltiservice_profile
++ Success ++
-->ltiservice_toolproxy
++ Success ++
-->ltiservice_toolsettings
++ Success ++
-->quiz_grading
++ Success ++
-->quiz_overview
++ Success ++
-->quiz_responses
++ Success ++
-->quiz_statistics
++ Success ++
-->quizaccess_delaybetweenattempts
++ Success ++
-->quizaccess_ipaddress
++ Success ++
-->quizaccess_numattempts
++ Success ++
-->quizaccess_offlineattempts
++ Success ++
-->quizaccess_openclosedate
++ Success ++
-->quizaccess_password
++ Success ++
-->quizaccess_seb
++ Success ++
-->quizaccess_securewindow
++ Success ++
-->quizaccess_timelimit
++ Success ++
-->scormreport_basic
++ Success ++
-->scormreport_graphs
++ Success ++
-->scormreport_interactions
++ Success ++
-->scormreport_objectives
++ Success ++
-->workshopform_accumulative
++ Success ++
-->workshopform_comments
++ Success ++
-->workshopform_numerrors
++ Success ++
-->workshopform_rubric
++ Success ++
-->workshopallocation_manual
++ Success ++
-->workshopallocation_random
++ Success ++
-->workshopallocation_scheduled
++ Success ++
-->workshopeval_best
++ Success ++
-->atto_accessibilitychecker
++ Success ++
-->atto_accessibilityhelper
++ Success ++
-->atto_align
++ Success ++
-->atto_backcolor
++ Success ++
-->atto_bold
++ Success ++
-->atto_charmap
++ Success ++
-->atto_clear
++ Success ++
-->atto_collapse
++ Success ++
-->atto_emojipicker
++ Success ++
-->atto_emoticon
++ Success ++
-->atto_equation
++ Success ++
-->atto_fontcolor
++ Success ++
-->atto_h5p
++ Success ++
-->atto_html
++ Success ++
-->atto_image
++ Success ++
-->atto_indent
++ Success ++
-->atto_italic
++ Success ++
-->atto_link
++ Success ++
-->atto_managefiles
++ Success ++
-->atto_media
++ Success ++
-->atto_noautolink
++ Success ++
-->atto_orderedlist
++ Success ++
-->atto_recordrtc
++ Success ++
-->atto_rtl
++ Success ++
-->atto_strike
++ Success ++
-->atto_subscript
++ Success ++
-->atto_superscript
++ Success ++
-->atto_table
++ Success ++
-->atto_title
++ Success ++
-->atto_underline
++ Success ++
-->atto_undo
++ Success ++
-->atto_unorderedlist
++ Success ++
-->tinymce_ctrlhelp
++ Success ++
-->tinymce_managefiles
++ Success ++
-->tinymce_moodleemoticon
++ Success ++
-->tinymce_moodleimage
++ Success ++
-->tinymce_moodlemedia
++ Success ++
-->tinymce_moodlenolink
++ Success ++
-->tinymce_pdw
++ Success ++
-->tinymce_spellchecker
++ Success ++
-->tinymce_wrap
++ Success ++
-->logstore_database
++ Success ++
-->logstore_legacy
++ Success ++
-->logstore_standard
++ Success ++
Acceptance tests site installed
Creating Behat configuration ... done in 1.03 seconds.
Building theme CSS for boost [ltr] ... done in 1.2 seconds.
Building theme CSS for classic [ltr] ... done in 1.12 seconds.
Testing environment themes built
Acceptance tests environment enabled on http://webserver, to run the tests use:
vendor/bin/behat --config /var/www/behatdata/behatrun/behat/behat.yml

That run required a long time compared to other DB types: slow but w/o any issue. Maybe, you should try to "wait" for the DB Server to become available.

HTH, Matteo

jpahullo commented 3 years ago

Hi @scara!

Thanks for the info. It's very weird, really weird. I can see from your logs that it took just 2 "waits" for the oracle db being ready. I left it for half an hour and no result. And running the docker logs -f moodledocker_db_1 showed the result from the previous comment.

I'll try again for sure. I'll let you know.

Thanks!

Jordi

jpahullo commented 3 years ago

I proceeded the way you did and I the errors persist:

$ docker logs -f moodledocker_db_1 
Starting Oracle Net Listener.
Starting Oracle Database 11g Express Edition instance.

ERROR:
ORA-12547: TNS:lost contact

SP2-0306: Invalid option.
Usage: CONN[ECT] [{logon|/|proxy} [AS {SYSDBA|SYSOPER|SYSASM}] [edition=value]]
where <logon> ::= <username>[/<password>][@<connect_identifier>]
      <proxy> ::= <proxyuser>[<username>][/<password>][@<connect_identifier>]
ERROR:
ORA-12547: TNS:lost contact

SP2-0306: Invalid option.
Usage: CONN[ECT] [{logon|/|proxy} [AS {SYSDBA|SYSOPER|SYSASM}] [edition=value]]
where <logon> ::= <username>[/<password>][@<connect_identifier>]
      <proxy> ::= <proxyuser>[<username>][/<password>][@<connect_identifier>]
Shutting down Oracle Database 11g Express Edition instance.
Stopping Oracle Net Listener.

Starting Oracle Net Listener.
Starting Oracle Database 11g Express Edition instance.

/usr/sbin/startup.sh: running /docker-entrypoint-initdb.d/01-moodle-user.sql

SQL*Plus: Release 11.2.0.2.0 Production on Fri Aug 13 10:50:28 2021

Copyright (c) 1982, 2011, Oracle.  All rights reserved.

ERROR:
ORA-12547: TNS:lost contact

Enter user-name: Enter password: 
ERROR:
ORA-12547: TNS:lost contact

Enter user-name: 

No luck.

jpahullo commented 3 years ago

I'll stop all containers, docker system prune -a and I'll try again

jpahullo commented 3 years ago

I did it and still the error inside the oracle container startup.sh does not work:

$ ./start-docker 
+ source .env
++ MOODLE_DOCKER_WWWROOT=/home/jordi/SREd/moodle.org/moodle
++ MOODLE_DOCKER_WEB_PORT=8000
++ MOODLE_DOCKER_DB=oracle
++ MOODLE_DOCKER_PHP_VERSION=7.4
+ cut -d = -f1
+ read line
+ export MOODLE_DOCKER_WWWROOT
+ read line
+ export MOODLE_DOCKER_WEB_PORT
+ read line
+ export MOODLE_DOCKER_DB
+ read line
+ export MOODLE_DOCKER_PHP_VERSION
+ read line
+ ./bin/moodle-docker-compose up -d
Creating network "moodledocker_default" with the default driver
Pulling exttests (moodlehq/moodle-exttests:latest)...
latest: Pulling from moodlehq/moodle-exttests
000eee12ec04: Pull complete
8ae4f9fcfeea: Pull complete
60f22fbbd07a: Pull complete
ccc7a63ad75f: Pull complete
a2427b8dd6e7: Pull complete
91cac3b30184: Pull complete
d6e40015fc10: Pull complete
54695fdb10a7: Pull complete
500ca11be45f: Pull complete
86b2805859cf: Pull complete
c61685fa4f4f: Pull complete
0bf989f9dbbb: Pull complete
01848ea209b5: Pull complete
0f6a22a6d1b5: Pull complete
Digest: sha256:72be6bc970756127610cae7fc3e31d27a2a6041e02245cb1a2961f70ea5e58b8
Status: Downloaded newer image for moodlehq/moodle-exttests:latest
Pulling db (moodlehq/moodle-db-oracle-r2:latest)...
latest: Pulling from moodlehq/moodle-db-oracle-r2
5667fdb72017: Pull complete
d83811f270d5: Pull complete
ee671aafb583: Pull complete
7fc152dfb3a6: Pull complete
51896e240a72: Pull complete
64e16b57ee0a: Pull complete
18e53bbb289b: Pull complete
Digest: sha256:dbcdb20e1919abb180235fd0d3d30998de58de116bdcaf955d2e169de2700dfb
Status: Downloaded newer image for moodlehq/moodle-db-oracle-r2:latest
Pulling mailhog (mailhog/mailhog:latest)...
latest: Pulling from mailhog/mailhog
df20fa9351a1: Pull complete
ed8968b2872e: Pull complete
a92cc7c5fd73: Pull complete
f17c8f1adafb: Pull complete
03954754c53a: Pull complete
60493946972a: Pull complete
368ee3bc1dbb: Pull complete
Digest: sha256:8d76a3d4ffa32a3661311944007a415332c4bb855657f4f6c57996405c009bea
Status: Downloaded newer image for mailhog/mailhog:latest
Pulling webserver (moodlehq/moodle-php-apache:7.4)...
7.4: Pulling from moodlehq/moodle-php-apache
b4d181a07f80: Pull complete
78b85dd8f014: Pull complete
8589b26a90be: Pull complete
f5af5d641946: Pull complete
614ec6f0b8d6: Pull complete
12b28f3797fb: Pull complete
96bcb7d2e6b0: Pull complete
09a46dfaa772: Pull complete
1a85b508a14e: Pull complete
c6fd9c89235a: Pull complete
40b955b2d455: Pull complete
fda03b9af7e2: Pull complete
570ea029c915: Pull complete
33896b419cda: Pull complete
b636e10e0567: Pull complete
90453f2e1636: Pull complete
ec36ba073b30: Pull complete
b27170bafa1c: Pull complete
7277fa7a5dc2: Pull complete
Digest: sha256:cf5eab312ede190a30ea7ac87b776b33f925419089a43e5c1a7aa169d941be3a
Status: Downloaded newer image for moodlehq/moodle-php-apache:7.4
Pulling selenium (selenium/standalone-firefox:2.53.1)...
2.53.1: Pulling from selenium/standalone-firefox
cad964aed91d: Pull complete
3a80a22fea63: Pull complete
50de990d7957: Pull complete
61e032b8f2cb: Pull complete
9f03ce1741bf: Pull complete
23b84691f9a2: Pull complete
1f1667297256: Pull complete
e4bc09a9d3b6: Pull complete
47592bc70a93: Pull complete
719dfe03ca53: Pull complete
714f82dc9591: Pull complete
e5f5c0bcf29d: Pull complete
457e8ed4985d: Pull complete
b24566c33966: Pull complete
b73b2c7604a1: Pull complete
f0c6dda3bc97: Pull complete
6a19c85d6d4e: Pull complete
6926806ab6b4: Pull complete
Digest: sha256:3d6386d06633bb226e867b573e804105f0c50ea04ea649d08ab97d9a8c76c639
Creating moodledocker_exttests_1  ... done
Creating moodledocker_db_1        ... done
Creating moodledocker_mailhog_1   ... done
Creating moodledocker_mailhog_1   ... 
Creating moodledocker_webserver_1 ... done
Creating moodledocker_webserver_1 ... 
+ ./bin/moodle-docker-wait-for-db
Waiting for oracle to come up...
Waiting for oracle to come up...
Waiting for oracle to come up...
Waiting for oracle to come up...
Waiting for oracle to come up...
^C

Then, in the oracle container:

$ docker logs -f moodledocker_db_1 
Starting Oracle Net Listener.
Starting Oracle Database 11g Express Edition instance.

ERROR:
ORA-12547: TNS:lost contact

SP2-0306: Invalid option.
Usage: CONN[ECT] [{logon|/|proxy} [AS {SYSDBA|SYSOPER|SYSASM}] [edition=value]]
where <logon> ::= <username>[/<password>][@<connect_identifier>]
      <proxy> ::= <proxyuser>[<username>][/<password>][@<connect_identifier>]
ERROR:
ORA-12547: TNS:lost contact

SP2-0306: Invalid option.
Usage: CONN[ECT] [{logon|/|proxy} [AS {SYSDBA|SYSOPER|SYSASM}] [edition=value]]
where <logon> ::= <username>[/<password>][@<connect_identifier>]
      <proxy> ::= <proxyuser>[<username>][/<password>][@<connect_identifier>]
Shutting down Oracle Database 11g Express Edition instance.
Stopping Oracle Net Listener.

Starting Oracle Net Listener.
Starting Oracle Database 11g Express Edition instance.

/usr/sbin/startup.sh: running /docker-entrypoint-initdb.d/01-moodle-user.sql

SQL*Plus: Release 11.2.0.2.0 Production on Fri Aug 13 11:14:18 2021

Copyright (c) 1982, 2011, Oracle.  All rights reserved.

ERROR:
ORA-12547: TNS:lost contact

Enter user-name: Enter password: 
ERROR:
ORA-12547: TNS:lost contact

Enter user-name: 

I'm really sorry, but I cannot start an oracle container to continue with this issue.

jpahullo commented 3 years ago

When I run the command detailed in the moodlehq/moodle-db-oracle, I still see the same error:

$ docker run --name db0 -p 1521:1521 moodlehq/moodle-db-oracle-r2
Starting Oracle Net Listener.
Starting Oracle Database 11g Express Edition instance.

ERROR:
ORA-12547: TNS:lost contact

SP2-0306: Invalid option.
Usage: CONN[ECT] [{logon|/|proxy} [AS {SYSDBA|SYSOPER|SYSASM}] [edition=value]]
where <logon> ::= <username>[/<password>][@<connect_identifier>]
      <proxy> ::= <proxyuser>[<username>][/<password>][@<connect_identifier>]
ERROR:
ORA-12547: TNS:lost contact

SP2-0306: Invalid option.
Usage: CONN[ECT] [{logon|/|proxy} [AS {SYSDBA|SYSOPER|SYSASM}] [edition=value]]
where <logon> ::= <username>[/<password>][@<connect_identifier>]
      <proxy> ::= <proxyuser>[<username>][/<password>][@<connect_identifier>]
Shutting down Oracle Database 11g Express Edition instance.
Stopping Oracle Net Listener.

Starting Oracle Net Listener.
Starting Oracle Database 11g Express Edition instance.

/usr/sbin/startup.sh: running /docker-entrypoint-initdb.d/01-moodle-user.sql

SQL*Plus: Release 11.2.0.2.0 Production on Fri Aug 13 11:20:07 2021

Copyright (c) 1982, 2011, Oracle.  All rights reserved.

ERROR:
ORA-12547: TNS:lost contact

Enter user-name: Enter password: 
ERROR:
ORA-12547: TNS:lost contact

Enter user-name: 
jpahullo commented 3 years ago

By the way, the script start-docker is a bash script built by myself for commodity:

$ cat start-docker
#!/bin/bash -x

source .env
cut -d '=' -f1 < .env | while read line; do
  export $line;
done

./bin/moodle-docker-compose up -d
./bin/moodle-docker-wait-for-db

echo "Moodle started!"

jpax360:/media/jordi/SREd/moodle.org/moodle-docker ⎇ master*
$ cat stop-docker 
#!/bin/bash

source .env
cut -d '=' -f1 < .env | while read line; do
  export $line;
done

./bin/moodle-docker-compose stop

echo "Moodle stopped!"

jpax360:/media/jordi/SREd/moodle.org/moodle-docker ⎇ master*
$ cat destroy-docker 
#!/bin/bash

source .env
cut -d '=' -f1 < .env | while read line; do
  export $line;
done

./bin/moodle-docker-compose down

echo "Moodle dockers destroyed!"

jpax360:/media/jordi/SREd/moodle.org/moodle-docker ⎇ master*
$ 
paulholden commented 3 years ago

Hi @jpahullo, I'll admin I'm now lost in what it is you are trying to do/prove here

Are you able to run tests on Oracle using standard/expected commands (e.g. the exact ones @scara & I have previously posted in comments to this thread) locally? Without any external tooling other than that provided by https://github.com/moodlehq/moodle-docker

In addition, please, @paulholden, do you think you could provide us the logs for the Moodle installation for phpunit tests and behat tests?

The logs contained nothing out of the ordinary, they completed without fail and I was able to run tests immediately after

jpahullo commented 3 years ago

Thanks @paulholden.

Sorry if I'm not totally clear.

You can build a local instance with moodle-docker using an oracle db without effort. However, I can't. I always see the logs from the oracle container I showed before.

What I need is first:

  1. Build a local instance of moodle-docker with oracle db.
  2. When success, initialize phpunit and see if the setup process (Moodle db instance for phpunit tests) shows some error or not, and then,
  3. When success, initialize behat tests (i.e., the Moodle db instance for behat tests) and check if they show some error.

Why I need to complete these 3 steps?

Githbub actions shows a problem accessing a method on null during the behat tests initialization (i.e., the Moodle db tables for running behat tests), and then it stops.

I provided a patch for it in core (lib/ddl/sql_generator.php), since that attribute can be null as stated in the phpdocs.

However, @scara suggests that there is something on the behat initialitzation that produces such an error (accessing a method on null), and only on the behat initialization.

So, in summary, I would like to reproduce the scenario locally, but I can't.

Let me know if I explained badly by my side.

jpahullo commented 3 years ago

I also tried the commands:

docker run --name db0base -p 1521:1521 wnameless/oracle-xe-11g-r2
docker exec -it db0base bash
# sqlplus sys/oracle as sysdba

# And also the oracle 18 image:
docker run --name db0base -p 1521:1521 wnameless/oracle-xe-11g-r2:18.04
docker exec -it db0base bash
# sqlplus sys/oracle as sysdba

and they both show me the same error:

$ docker exec -it db0base bash
root@ed2086c3fab3:/# sqlplus system/oracle as sysdba

SQL*Plus: Release 11.2.0.2.0 Production on Fri Aug 13 11:52:05 2021

Copyright (c) 1982, 2011, Oracle.  All rights reserved.

ERROR:
ORA-12547: TNS:lost contact

Enter user-name: ^[[A^C
root@ed2086c3fab3:/# sqlplus sys/oracle as sysdba

SQL*Plus: Release 11.2.0.2.0 Production on Fri Aug 13 11:52:29 2021

Copyright (c) 1982, 2011, Oracle.  All rights reserved.

ERROR:
ORA-12547: TNS:lost contact

Enter user-name: sys
Enter password: 
ERROR:
ORA-12547: TNS:lost contact

Enter user-name: ^C
root@ed2086c3fab3:/# exit
exit
jpahullo commented 3 years ago

So, I do not know how to proceed right now. I cannot start an oracle db container, neither with the moodlehq/moodle-db-oracle nor with base docker image wnameless/oracle-xe-11g-r2.

I'm just blocked, stucked.

If you can make the tests we commented before (the 3 steps locally), it would be great.

scara commented 3 years ago

Hi @jpahullo, could you share the versions of your docker stack? If you've the latest versions of both the upstream code and the images, maybe the reason is there.

Mine:

# arch
x86_64
# cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
# docker version
Client: Docker Engine - Community
 Version:           20.10.8
 API version:       1.41
 Go version:        go1.16.6
 Git commit:        3967b7d
 Built:             Fri Jul 30 19:55:49 2021
 OS/Arch:           linux/amd64
 Context:           default
 Experimental:      true

Server: Docker Engine - Community
 Engine:
  Version:          20.10.8
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.16.6
  Git commit:       75249d8
  Built:            Fri Jul 30 19:54:13 2021
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.4.9
  GitCommit:        e25210fe30a0a703442421b0f60afac609f950a3
 runc:
  Version:          1.0.1
  GitCommit:        v1.0.1-0-g4144b63
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0
# docker-compose version
docker-compose version 1.29.2, build 5becea4c
docker-py version: 5.0.0
CPython version: 3.7.10
OpenSSL version: OpenSSL 1.1.0l  10 Sep 2019

HTH, Matteo

stronk7 commented 6 months ago

Hi,

as far as this is quite old and Oracle is being deprecated and will be removed in a couple of versions, I am going to close this now.

Reference: https://moodle.org/mod/forum/discuss.php?d=456122