DatabaseUpgradeTest for core version 2.2

Hi everyone,

I am currently working on a ticket that should implement a DatabaseUpgradeTest for version 2.2.0. This test should validate if the changes in the data model, e. g. adding a new attribute, are really reflected in the created database. For version 1.9.7 there already exists an according test set on GitHub:

I now want to use a similar test as the one written by @raff above to test the databases changes for the upgrade to version 2.2.0. As the layout is similar to the upgrade test for 1.9.7. I need to create a H2.DB file, more precisley a file like openmrs-1.9.7.h2.db which will load an initial database. I have the following questions regarding this file:

  1. This file should in my scenario represent the database at version 2.2.0 (as the name suggests) or the state of the previous version so that the changeset for 2.2.0 can yet be applied?
  2. How can I create such a H2.db file in the first place? I could not find a way to do this in the MRS or online documentation. A link would be welcome as well :slight_smile:
  3. Do I actually need a new version of this or could I use the 1.9.7 for the execution of then newer test.

This topic is related to the following issue: TRUNK-5420 And the following Talks topic: enable-running-openmrs-2-x-on-h2-database

(cc for @mogoodrich and @wyclif since we were discussing this in my PR regarding the filler changes in the model)

I’d think the database needs to be at version 2.1.0 and not 2.2.0.

@raff can comment on how he created the .db file, my guess is that it’s just an export of the database in some format, could be binary.

(I’m replying with a delay as I was on vacation)

I’ve created 1.9.7 file by simply running that version of openmrs with SDK selecting the H2 as the DB. The file can be found in server files under ~/openmrs/serverid/…

@raff what’s the format of the file? Is it a SQL dump?

@raff @wyclif

I can have a look into this next weekend. Then I will try to create the file and finalize the DatabaseUpgrade test as discussed in the Jira issue. I have the following two questions right now regarding this:

(1) Does it has to be a “dump” from the H2 database or could it also be from the MySQL database. Why was this databases chosen?

(2) I am having doubts about the execution of the SDK. The comment should be according to the documentation:

mvn openmrs-sdk:setup -DserverId=webservices-dev -Dplatform=2.0.0

However, I have the feeling that it would also already execute the changsets that are currently part of the master. So my approach would be to clone the branch 2.1.X and then execute the SDK on that version (probably with the same command)?

Or is there a better approach to make sure only 2.1.X data is existing?

@wyclif, the .db file is not a SQL dump. It’s a binary file used by H2 to store db.

@fruether, H2 was chosen, because it can be easily run within a test as opposed to a MySQL or Maria DB server.

The setup command you quoted will download and use openmrs-core 2.0.0 war, not a master. If you would like to setup a server with the master, you’d need to specify 2.2.0-SNAPSHOT.

We use h2 for our unit tests, so from what @raff said the .db is a binary image of the h2 database.

@raff if I am using 2.2.0-SNAPSHOT now. So basically I executed:

`mvn openmrs-sdk:setup -DserverId=webservices-dev -Dplatform=2.2.0-SNAPSHOT`

I do not get h2 shown as an option for selection. Only MySQL & Docker. My understanding is that this behaviour is based on on the fact that it is a reference Application (2.2.0). Therefore, I can’t use H2 on this. Any remarks/ideas how I can still get a H2 file from this version for the upgrade test?

If I install 2.2.0 I can use H2. I executed:

mvn openmrs-sdk:run -DserverId=webservices-dev

I requested to update the version while executing the 2.0.0 toolkit that was configured to use H2

The server currently has openmrs.war in version 2.0.0. Would you like to update it to 2.2.0-SNAPSHOT from the current directory? [Y/n]: Y

The execution logs on maven shows that the upgrade does have a lot failing conditions. Probably because 2.2.0 does not support H2?

 liquibase-update-to-latest.xml : DBMS Precondition failed: expected postgresql, got h2
Output of tool:

Anyways the general output looks good:

Anyways: if I am copying the file to use this generated db file for the execution of the upgrade test I get the following error:

org.h2.jdbc.JdbcSQLException: Unsupported database file version or invalid file header in file “/private/var/folders/02/hn40l_hs6ys_9rfmq_m3dfzr0000gn/T/openmrs-tests-temp-8019167480642612732/openmrs.h2.db” [90048-196]

I see the following options. Any ideas and thoughts on it?:

  • Use 2.2.0 to create H2 file and use this for testing although it is the wrong version
  • Using MySQL?
  • Finding a way to generate a H2 file from 2.2.0