BackendTests.py 3.67 KB
import gzip
import os.path
import sys
import unittest
from datetime import datetime as ddatetime, datetime
from pprint import pprint

import numpy.ma.core
from netCDF4 import Dataset

from web.run import retrieve_amda_netcdf, get_data_for_target, _sta_sto, _read_var, default_nc_keys

FILE_DATE_FMT = "%Y-%m-%d %H:%M:%S"


class BaseTestCase(unittest.TestCase):
    def setUp(self):
        # initialise app
        # self.app = create_app(TestConfig)

        # update flask context
        # self.app_context = self.app.app_context()
        # self.app_context.push()
        pass

    def tearDown(self):
        # if os.path.isfile(self.db_path):
        #     os.remove(self.db_path)
        # self.app_context.pop()
        pass

    def test_always_true(self):
        self.assertTrue(True)


class AmdaTestCase(BaseTestCase):

    def test_amda_retrieve(self):
        started_at = ddatetime.strptime("2021-12-17 00:00:00", FILE_DATE_FMT)
        stopped_at = ddatetime.strptime("2021-12-18 00:00:00", FILE_DATE_FMT)
        amda_list = retrieve_amda_netcdf("earth", "omni_hour_all", started_at, stopped_at)
        self.assertEqual(1, len(amda_list))
        self.assertIn('amda-irap-omp-eu-ddservice-base-data-omni-hour-omni202107010-nc', amda_list[0])

    def test_get_data_for_target(self):
        target_config = {'type': 'planet', 'slug': 'earth', 'name': 'Earth', 'title': 'Earth', 'orbit': {'models': []},
                         'models': {
                             'om': [{'slug': 'omni_hour_all', 'parameters': {'pdyn': 'RamP'}},
                                    {'slug': 'ace_swepam_real_1h',
                                     'parameters': {'dens': 'Dens', 'vtot': 'Vel', 'temp': 'Temp'}}],
                             'sa': [{'slug': 'omni_hour_all', 'parameters': {'pdyn': 'RamP'}},
                                    {'slug': 'ace_swepam_real_1h',
                                     'parameters': {'dens': 'Dens', 'vtot': 'Vel', 'temp': 'Temp'}}],
                             'sb': [{'slug': 'omni_hour_all', 'parameters': {'pdyn': 'RamP'}},
                                    {'slug': 'ace_swepam_real_1h',
                                     'parameters': {'dens': 'Dens', 'vtot': 'Vel', 'temp': 'Temp'}}]},
                         'locked': False, 'default': True, 'catalog_layers': {'cmecatalogs': []}}

        started_at = ddatetime.strptime("2021-12-17 00:00:00", FILE_DATE_FMT)
        stopped_at = ddatetime.strptime("2021-12-18 00:00:00", FILE_DATE_FMT)
        model = {'parameters': {'dens': 'Dens', 'temp': 'Temp', 'vtot': 'Vel'}, 'slug': 'ace_swepam_real_1h'}
        s0, s1 = _sta_sto(model, started_at, stopped_at)
        all_data = get_data_for_target(target_config, 'om', s0, s1)
        self.assertEqual(25, len(all_data))

    def test_sta_sto(self):
        started_at = ddatetime.strptime("2021-12-17 00:00:00", FILE_DATE_FMT)
        stopped_at = ddatetime.strptime("2021-12-18 00:00:00", FILE_DATE_FMT)
        model = {'parameters': {'dens': 'Dens', 'temp': 'Temp', 'vtot': 'Vel'}, 'slug': 'ace_swepam_real_1h'}

        s0, s1 = _sta_sto(model, started_at, stopped_at)

        self.assertIsInstance(s0, datetime)
        self.assertIsInstance(s1, datetime)

    def test_var_read_nc_float32(self):
        SCRIPT_PATH = os.path.dirname(__file__)
        PROJECT_DIR = os.path.abspath(os.path.join(SCRIPT_PATH, os.pardir))
        local_netc_file = os.path.join(PROJECT_DIR,'tests-resources', 'amda-irap-omp-eu-ddservice-base-data-omni-hour-omni202107010-nc')
        cdf_handle = Dataset(local_netc_file, "r", format="NETCDF4")
        nc_keys = default_nc_keys.copy()
        data_v = _read_var(cdf_handle, nc_keys, 'vtot')
        self.assertIsInstance(data_v[0], numpy.float32)