Skip to content
Snippets Groups Projects
Select Git revision
  • ccdc8b723fe921b09ef260a70e73325a60cd755d
  • main default protected
  • CICD_Fix_kr
  • Kelvinrr-patch-2
  • Kelvinrr-patch-1
  • docs_workflow
  • read_gpf_changelog
  • read_gpf_gxp_hybrid
  • ci_py_version
  • 1.6.0
  • v1.5.5
  • v1.5.4
  • v1.5.3
  • v1.5.2
  • v1.5.0
  • v1.5.1
  • v1.4.0
  • v1.3.0
  • 1.2.5
  • 1.2.4
  • 1.2.3
  • 1.2.2
  • 1.2.0
  • 1.1.0
  • 1.0.2
  • 1.0.1
  • 1.0.0
27 results

pytest.ini

Blame
  • Fixtures.h 9.30 KiB
    #ifndef Fixtures_h
    #define Fixtures_h
    
    #include "UsgsAstroFrameSensorModel.h"
    #include "UsgsAstroLsSensorModel.h"
    #include "UsgsAstroPlugin.h"
    #include "UsgsAstroSarSensorModel.h"
    
    #include <nlohmann/json.hpp>
    
    #include <fstream>
    #include <map>
    #include <sstream>
    #include <string>
    
    #include <gtest/gtest.h>
    
    #include <spdlog/sinks/ostream_sink.h>
    
    // Should this be positioned somewhere in the public API?
    inline void jsonToIsd(nlohmann::json &object, csm::Isd &isd,
                          std::string prefix = "") {
      for (nlohmann::json::iterator it = object.begin(); it != object.end(); ++it) {
        nlohmann::json jsonValue = it.value();
        if (jsonValue.is_array()) {
          for (int i = 0; i < jsonValue.size(); i++) {
            isd.addParam(prefix + it.key(), jsonValue[i].dump());
          }
        } else if (jsonValue.is_string()) {
          isd.addParam(prefix + it.key(), jsonValue.get<std::string>());
        } else {
          isd.addParam(prefix + it.key(), jsonValue.dump());
        }
      }
    }
    
    //////////Framing Camera Sensor Model Fixtures//////////
    
    class FrameSensorModel : public ::testing::Test {
     protected:
      csm::Isd isd;
      UsgsAstroFrameSensorModel *sensorModel;
    
      void SetUp() override {
        sensorModel = NULL;
    
        isd.setFilename("data/simpleFramerISD.img");
        UsgsAstroPlugin frameCameraPlugin;
    
        csm::Model *model = frameCameraPlugin.constructModelFromISD(
            isd, "USGS_ASTRO_FRAME_SENSOR_MODEL");
        sensorModel = dynamic_cast<UsgsAstroFrameSensorModel *>(model);
    
        ASSERT_NE(sensorModel, nullptr);
      }
    
      void TearDown() override {
        if (sensorModel) {
          delete sensorModel;
          sensorModel = NULL;
        }
      }
    };
    
    class FrameSensorModelLogging : public ::testing::Test {
     protected:
      csm::Isd isd;
      UsgsAstroFrameSensorModel *sensorModel;
      std::ostringstream oss;
    
      void SetUp() override {
        sensorModel = NULL;
    
        isd.setFilename("data/simpleFramerISD.img");
        UsgsAstroPlugin frameCameraPlugin;
    
        csm::Model *model = frameCameraPlugin.constructModelFromISD(
            isd, "USGS_ASTRO_FRAME_SENSOR_MODEL");
        sensorModel = dynamic_cast<UsgsAstroFrameSensorModel *>(model);
    
        ASSERT_NE(sensorModel, nullptr);
    
        auto ostream_sink = std::make_shared<spdlog::sinks::ostream_sink_mt>(oss);
        // We need a unique ID for the sensor model so that we don't have
        // logger name collisions. Use the sensor model's memory addresss.
        std::uintptr_t sensorId = reinterpret_cast<std::uintptr_t>(sensorModel);
        auto logger = std::make_shared<spdlog::logger>(std::to_string(sensorId),
                                                       ostream_sink);
        spdlog::register_logger(logger);
    
        sensorModel->setLogger(std::to_string(sensorId));
      }
    
      void TearDown() override {
        if (sensorModel) {
          // Remove the logger from the registry for other tests
          std::uintptr_t sensorId = reinterpret_cast<std::uintptr_t>(sensorModel);
          spdlog::drop(std::to_string(sensorId));
    
          delete sensorModel;
          sensorModel = NULL;
        }
    
        EXPECT_FALSE(oss.str().empty());
      }
    };
    
    class OrbitalFrameSensorModel : public ::testing::Test {
     protected:
      csm::Isd isd;
      UsgsAstroFrameSensorModel *sensorModel;
    
      void SetUp() override {
        sensorModel = NULL;
    
        isd.setFilename("data/orbitalFramer.img");
        UsgsAstroPlugin frameCameraPlugin;
    
        csm::Model *model = frameCameraPlugin.constructModelFromISD(
            isd, "USGS_ASTRO_FRAME_SENSOR_MODEL");
        sensorModel = dynamic_cast<UsgsAstroFrameSensorModel *>(model);
    
        ASSERT_NE(sensorModel, nullptr);
      }
    
      void TearDown() override {
        if (sensorModel) {
          delete sensorModel;
          sensorModel = NULL;
        }
      }
    };
    
    class FrameIsdTest : public ::testing::Test {
     protected:
      csm::Isd isd;
    
      virtual void SetUp() { isd.setFilename("data/simpleFramerISD.img"); }
    };
    
    class ConstVelLineScanIsdTest : public ::testing::Test {
     protected:
      csm::Isd isd;
    
      virtual void SetUp() { isd.setFilename("data/constVelocityLineScan.img"); }
    };
    
    class ImageCoordParameterizedTest
        : public ::testing::TestWithParam<csm::ImageCoord> {};
    
    class FramerParameterizedTest
        : public ::testing::TestWithParam<csm::ImageCoord> {
     protected:
      csm::Isd isd;
    
      std::string printIsd(csm::Isd &localIsd) {
        std::string str;
        std::multimap<std::string, std::string> isdmap = localIsd.parameters();
        for (auto it = isdmap.begin(); it != isdmap.end(); ++it) {
          str.append(it->first);
          str.append(":");
          str.append(it->second);
        }
        return str;
      }
      UsgsAstroFrameSensorModel *createModel(csm::Isd &modifiedIsd) {
        UsgsAstroPlugin frameCameraPlugin;
        csm::Model *model = frameCameraPlugin.constructModelFromISD(
            modifiedIsd, "USGS_ASTRO_FRAME_SENSOR_MODEL");
    
        UsgsAstroFrameSensorModel *sensorModel =
            dynamic_cast<UsgsAstroFrameSensorModel *>(model);
    
        if (sensorModel)
          return sensorModel;
        else
          return nullptr;
      }
    
      virtual void SetUp() { isd.setFilename("data/simpleFramerISD.img"); };
    };
    
    class FrameStateTest : public ::testing::Test {
     protected:
      csm::Isd isd;
      UsgsAstroFrameSensorModel *createModifiedStateSensorModel(std::string key,
                                                                double newValue) {
        UsgsAstroPlugin cameraPlugin;
        csm::Model *model = cameraPlugin.constructModelFromISD(
            isd, "USGS_ASTRO_FRAME_SENSOR_MODEL");
    
        UsgsAstroFrameSensorModel *sensorModel =
            dynamic_cast<UsgsAstroFrameSensorModel *>(model);
        if (sensorModel) {
          sensorModel->getModelState();
          std::string modelState = sensorModel->getModelState();
          auto state = stateAsJson(modelState);
          state[key] = newValue;
          sensorModel->replaceModelState(state.dump());
    
          return sensorModel;
        } else {
          return nullptr;
        }
      }
    
      void SetUp() override { isd.setFilename("data/simpleFramerISD.img"); }
    };
    
    //////////Line Scan Camera Sensor Model Fixtures//////////
    
    class ConstVelocityLineScanSensorModel : public ::testing::Test {
     protected:
      csm::Isd isd;
      UsgsAstroLsSensorModel *sensorModel;
    
      void SetUp() override {
        sensorModel = NULL;
    
        isd.setFilename("data/constVelocityLineScan.img");
        UsgsAstroPlugin cameraPlugin;
    
        csm::Model *model = cameraPlugin.constructModelFromISD(
            isd, "USGS_ASTRO_LINE_SCANNER_SENSOR_MODEL");
        sensorModel = dynamic_cast<UsgsAstroLsSensorModel *>(model);
    
        ASSERT_NE(sensorModel, nullptr);
      }
    
      void TearDown() override {
        if (sensorModel) {
          delete sensorModel;
          sensorModel = NULL;
        }
      }
    };
    
    class OrbitalLineScanSensorModel : public ::testing::Test {
     protected:
      csm::Isd isd;
      UsgsAstroLsSensorModel *sensorModel;
    
      void SetUp() override {
        sensorModel = NULL;
    
        isd.setFilename("data/orbitalLineScan.img");
        UsgsAstroPlugin cameraPlugin;
    
        csm::Model *model = cameraPlugin.constructModelFromISD(
            isd, "USGS_ASTRO_LINE_SCANNER_SENSOR_MODEL");
        sensorModel = dynamic_cast<UsgsAstroLsSensorModel *>(model);
    
        ASSERT_NE(sensorModel, nullptr);
      }
    
      void TearDown() override {
        if (sensorModel) {
          delete sensorModel;
          sensorModel = NULL;
        }
      }
    };
    
    class FlippedOrbitalLineScanSensorModel : public ::testing::Test {
     protected:
      csm::Isd isd;
      UsgsAstroLsSensorModel *sensorModel;
    
      void SetUp() override {
        sensorModel = NULL;
    
        isd.setFilename("data/flippedOrbitalLineScan.img");
        UsgsAstroPlugin cameraPlugin;
    
        csm::Model *model = cameraPlugin.constructModelFromISD(
            isd, "USGS_ASTRO_LINE_SCANNER_SENSOR_MODEL");
        sensorModel = dynamic_cast<UsgsAstroLsSensorModel *>(model);
    
        ASSERT_NE(sensorModel, nullptr);
      }
    
      void TearDown() override {
        if (sensorModel) {
          delete sensorModel;
          sensorModel = NULL;
        }
      }
    };
    
    class TwoLineScanSensorModels : public ::testing::Test {
     protected:
      csm::Isd isd;
      UsgsAstroLsSensorModel *sensorModel1;
      UsgsAstroLsSensorModel *sensorModel2;
    
      void SetUp() override {
        sensorModel1 = nullptr;
        sensorModel2 = nullptr;
    
        isd.setFilename("data/orbitalLineScan.img");
        UsgsAstroPlugin cameraPlugin;
    
        csm::Model *model1 = cameraPlugin.constructModelFromISD(
            isd, "USGS_ASTRO_LINE_SCANNER_SENSOR_MODEL");
        sensorModel1 = dynamic_cast<UsgsAstroLsSensorModel *>(model1);
        csm::Model *model2 = cameraPlugin.constructModelFromISD(
            isd, "USGS_ASTRO_LINE_SCANNER_SENSOR_MODEL");
        sensorModel2 = dynamic_cast<UsgsAstroLsSensorModel *>(model2);
    
        ASSERT_NE(sensorModel1, nullptr);
        ASSERT_NE(sensorModel2, nullptr);
      }
    
      void TearDown() override {
        if (sensorModel1) {
          delete sensorModel1;
          sensorModel1 = nullptr;
        }
        if (sensorModel2) {
          delete sensorModel2;
          sensorModel2 = nullptr;
        }
      }
    };
    
    //////////////////
    // SAR Fixtures //
    //////////////////
    
    class SarIsdTest : public ::testing::Test {
     protected:
      csm::Isd isd;
    
      virtual void SetUp() { isd.setFilename("data/orbitalSar.img"); }
    };
    
    class SarSensorModel : public ::testing::Test {
     protected:
      csm::Isd isd;
      UsgsAstroSarSensorModel *sensorModel;
    
      void SetUp() override {
        sensorModel = NULL;
    
        isd.setFilename("data/orbitalSar.img");
        UsgsAstroPlugin sarCameraPlugin;
    
        csm::Model *model = sarCameraPlugin.constructModelFromISD(
            isd, "USGS_ASTRO_SAR_SENSOR_MODEL");
        sensorModel = dynamic_cast<UsgsAstroSarSensorModel *>(model);
        ASSERT_NE(sensorModel, nullptr);
      }
    
      void TearDown() override {
        if (sensorModel) {
          delete sensorModel;
          sensorModel = NULL;
        }
      }
    };
    
    #endif