This is an automated email from the ASF dual-hosted git repository.

machristie pushed a commit to branch airavata-v2-refactoring
in repository https://gitbox.apache.org/repos/asf/airavata.git

commit e9e8a82c4d81fe2d59a6b137833ffb615529ad6b
Author: Marcus Christie <[email protected]>
AuthorDate: Thu Jun 1 14:12:44 2023 -0400

    Test and fixes for storing RunConfiguration
---
 .../apis/db/entity/RunConfigurationEntity.java     | 65 ++++++++++++++++++++
 .../db/entity/backend/ComputeBackendEntity.java    |  1 -
 .../apis/db/entity/backend/EC2BackendEntity.java   |  2 -
 .../apis/db/entity/backend/LocalBackendEntity.java |  2 -
 .../db/entity/backend/ServerBackendEntity.java     |  6 +-
 .../apis/handlers/ExecutionHandlerTest.java        | 69 +++++++++++++++++++++-
 .../src/main/proto/execution/experiment_stub.proto |  2 +
 7 files changed, 138 insertions(+), 9 deletions(-)

diff --git 
a/modules/airavata-apis/airavata-apis-server/src/main/java/org/apache/airavata/apis/db/entity/RunConfigurationEntity.java
 
b/modules/airavata-apis/airavata-apis-server/src/main/java/org/apache/airavata/apis/db/entity/RunConfigurationEntity.java
index e5b132cd8d..16ea643656 100644
--- 
a/modules/airavata-apis/airavata-apis-server/src/main/java/org/apache/airavata/apis/db/entity/RunConfigurationEntity.java
+++ 
b/modules/airavata-apis/airavata-apis-server/src/main/java/org/apache/airavata/apis/db/entity/RunConfigurationEntity.java
@@ -1,6 +1,9 @@
 package org.apache.airavata.apis.db.entity;
 
 import org.apache.airavata.apis.db.entity.backend.ComputeBackendEntity;
+import org.apache.airavata.apis.db.entity.backend.EC2BackendEntity;
+import org.apache.airavata.apis.db.entity.backend.LocalBackendEntity;
+import org.apache.airavata.apis.db.entity.backend.ServerBackendEntity;
 import org.hibernate.annotations.GenericGenerator;
 
 import javax.persistence.*;
@@ -55,4 +58,66 @@ public class RunConfigurationEntity {
     public void setDataMovementConfigs(List<DataMovementConfigurationEntity> 
dataMovementConfigs) {
         this.dataMovementConfigs = dataMovementConfigs;
     }
+
+    public ComputeBackendEntity getComputeBackend() {
+        return computeBackend;
+    }
+
+    public void setComputeBackend(ComputeBackendEntity computeBackend) {
+        this.computeBackend = computeBackend;
+    }
+
+    /*
+     * Helper getters/setters for mapping from/to protobuf messages
+     */
+
+    public ServerBackendEntity getServer() {
+        return computeBackend instanceof ServerBackendEntity ? 
(ServerBackendEntity) computeBackend : null;
+    }
+
+    public void setServer(ServerBackendEntity serverBackendEntity) {
+        this.computeBackend = serverBackendEntity;
+    }
+
+    public EC2BackendEntity getEc2() {
+        return computeBackend instanceof EC2BackendEntity ? (EC2BackendEntity) 
computeBackend : null;
+    }
+
+    public void setEc2(EC2BackendEntity ec2BackendEntity) {
+        this.computeBackend = ec2BackendEntity;
+    }
+
+    public LocalBackendEntity getLocal() {
+        return computeBackend instanceof LocalBackendEntity ? 
(LocalBackendEntity) computeBackend : null;
+    }
+
+    public void setLocal(LocalBackendEntity localBackendEntity) {
+        this.computeBackend = localBackendEntity;
+    }
+
+    @Override
+    public int hashCode() {
+        final int prime = 31;
+        int result = 1;
+        result = prime * result + ((runConfigId == null) ? 0 : 
runConfigId.hashCode());
+        return result;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj)
+            return true;
+        if (obj == null)
+            return false;
+        if (getClass() != obj.getClass())
+            return false;
+        RunConfigurationEntity other = (RunConfigurationEntity) obj;
+        if (runConfigId == null) {
+            if (other.runConfigId != null)
+                return false;
+        } else if (!runConfigId.equals(other.runConfigId))
+            return false;
+        return true;
+    }
+
 }
diff --git 
a/modules/airavata-apis/airavata-apis-server/src/main/java/org/apache/airavata/apis/db/entity/backend/ComputeBackendEntity.java
 
b/modules/airavata-apis/airavata-apis-server/src/main/java/org/apache/airavata/apis/db/entity/backend/ComputeBackendEntity.java
index 4939dc49f5..83d6b2c5e7 100644
--- 
a/modules/airavata-apis/airavata-apis-server/src/main/java/org/apache/airavata/apis/db/entity/backend/ComputeBackendEntity.java
+++ 
b/modules/airavata-apis/airavata-apis-server/src/main/java/org/apache/airavata/apis/db/entity/backend/ComputeBackendEntity.java
@@ -6,7 +6,6 @@ import javax.persistence.*;
 
 @Entity
 @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
-@DiscriminatorColumn(name = "backend_type")
 public abstract class ComputeBackendEntity {
 
     @Id
diff --git 
a/modules/airavata-apis/airavata-apis-server/src/main/java/org/apache/airavata/apis/db/entity/backend/EC2BackendEntity.java
 
b/modules/airavata-apis/airavata-apis-server/src/main/java/org/apache/airavata/apis/db/entity/backend/EC2BackendEntity.java
index cdfde29b15..5fb599e8f4 100644
--- 
a/modules/airavata-apis/airavata-apis-server/src/main/java/org/apache/airavata/apis/db/entity/backend/EC2BackendEntity.java
+++ 
b/modules/airavata-apis/airavata-apis-server/src/main/java/org/apache/airavata/apis/db/entity/backend/EC2BackendEntity.java
@@ -1,11 +1,9 @@
 package org.apache.airavata.apis.db.entity.backend;
 
 import javax.persistence.Column;
-import javax.persistence.DiscriminatorValue;
 import javax.persistence.Entity;
 
 @Entity
-@DiscriminatorValue("EC2")
 public class EC2BackendEntity extends ComputeBackendEntity {
 
     @Column
diff --git 
a/modules/airavata-apis/airavata-apis-server/src/main/java/org/apache/airavata/apis/db/entity/backend/LocalBackendEntity.java
 
b/modules/airavata-apis/airavata-apis-server/src/main/java/org/apache/airavata/apis/db/entity/backend/LocalBackendEntity.java
index f129ea7165..78060d4727 100644
--- 
a/modules/airavata-apis/airavata-apis-server/src/main/java/org/apache/airavata/apis/db/entity/backend/LocalBackendEntity.java
+++ 
b/modules/airavata-apis/airavata-apis-server/src/main/java/org/apache/airavata/apis/db/entity/backend/LocalBackendEntity.java
@@ -1,11 +1,9 @@
 package org.apache.airavata.apis.db.entity.backend;
 
 import javax.persistence.Column;
-import javax.persistence.DiscriminatorValue;
 import javax.persistence.Entity;
 
 @Entity
-@DiscriminatorValue("LOCAL")
 public class LocalBackendEntity extends ComputeBackendEntity {
 
 
diff --git 
a/modules/airavata-apis/airavata-apis-server/src/main/java/org/apache/airavata/apis/db/entity/backend/ServerBackendEntity.java
 
b/modules/airavata-apis/airavata-apis-server/src/main/java/org/apache/airavata/apis/db/entity/backend/ServerBackendEntity.java
index e5e3646da2..ddde970def 100644
--- 
a/modules/airavata-apis/airavata-apis-server/src/main/java/org/apache/airavata/apis/db/entity/backend/ServerBackendEntity.java
+++ 
b/modules/airavata-apis/airavata-apis-server/src/main/java/org/apache/airavata/apis/db/entity/backend/ServerBackendEntity.java
@@ -3,10 +3,12 @@ package org.apache.airavata.apis.db.entity.backend;
 import org.apache.airavata.apis.db.entity.backend.iface.SCPInterfaceEntity;
 import org.apache.airavata.apis.db.entity.backend.iface.SSHInterfaceEntity;
 
-import javax.persistence.*;
+import javax.persistence.Column;
+import javax.persistence.Entity;
+import javax.persistence.JoinColumn;
+import javax.persistence.OneToOne;
 
 @Entity
-@DiscriminatorValue("SERVER")
 public class ServerBackendEntity extends ComputeBackendEntity {
 
 
diff --git 
a/modules/airavata-apis/airavata-apis-server/src/test/java/org/apache/airavata/apis/handlers/ExecutionHandlerTest.java
 
b/modules/airavata-apis/airavata-apis-server/src/test/java/org/apache/airavata/apis/handlers/ExecutionHandlerTest.java
index b27f11da57..aef1cbc210 100644
--- 
a/modules/airavata-apis/airavata-apis-server/src/test/java/org/apache/airavata/apis/handlers/ExecutionHandlerTest.java
+++ 
b/modules/airavata-apis/airavata-apis-server/src/test/java/org/apache/airavata/apis/handlers/ExecutionHandlerTest.java
@@ -2,17 +2,26 @@ package org.apache.airavata.apis.handlers;
 
 import org.apache.airavata.api.execution.ExperimentRegisterRequest;
 import org.apache.airavata.api.execution.ExperimentRegisterResponse;
-import org.apache.airavata.api.execution.stubs.Experiment;
+import org.apache.airavata.api.execution.stubs.*;
+import org.apache.airavata.apis.db.entity.ApplicationRunInfoEntity;
+import org.apache.airavata.apis.db.entity.DataMovementConfigurationEntity;
 import org.apache.airavata.apis.db.entity.ExperimentEntity;
+import org.apache.airavata.apis.db.entity.RunConfigurationEntity;
+import org.apache.airavata.apis.db.entity.application.ApplicationEntity;
+import org.apache.airavata.apis.db.entity.backend.ComputeBackendEntity;
+import org.apache.airavata.apis.db.entity.backend.ServerBackendEntity;
+import org.apache.airavata.apis.db.entity.data.InDataMovementEntity;
 import org.apache.airavata.apis.db.repository.ExperimentRepository;
 import org.junit.jupiter.api.Test;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.transaction.annotation.Transactional;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
 
 @SpringBootTest
+@Transactional
 public class ExecutionHandlerTest {
 
     @Autowired
@@ -24,11 +33,39 @@ public class ExecutionHandlerTest {
     @Test
     void testExperimentMapping() {
 
+        // TODO: ec2
+        // TODO: local
+        ServerBackend serverBackend = ServerBackend.newBuilder()
+                .setHostName("server-hostname")
+                .build();
+        Application application = Application.newBuilder()
+                .setName("test-application")
+                .build();
+        ApplicationRunInfo applicationRunInfo = ApplicationRunInfo.newBuilder()
+                .setApplication(application)
+                .build();
+        FileLocation sourceLocation = FileLocation.newBuilder()
+                .setStorageId("source-location-storage-id")
+                .build();
+        InDataMovement inDataMovement = InDataMovement.newBuilder()
+                .setInputIndex(1)
+                .setSourceLocation(sourceLocation)
+                .build();
+        DataMovementConfiguration dataMovementConfiguration = 
DataMovementConfiguration.newBuilder()
+                .addInMovements(inDataMovement)
+                .build();
+        RunConfiguration runConfiguration = RunConfiguration.newBuilder()
+                .setServer(serverBackend)
+                .setAppRunInfo(applicationRunInfo)
+                .addDataMovementConfigs(dataMovementConfiguration)
+                .build();
         Experiment experiment = Experiment.newBuilder()
                 .setCreationTime(System.currentTimeMillis())
                 .setDescription("Sample Exp")
                 .setExperimentName("Exp Name")
                 .setGatewayId("gateway-id")
+                .setProjectId("project-id")
+                .addRunConfigs(runConfiguration)
                 .build();
 
         ExperimentRegisterRequest experimentRegisterRequest = 
ExperimentRegisterRequest.newBuilder()
@@ -45,6 +82,34 @@ public class ExecutionHandlerTest {
         assertEquals(experiment.getDescription(), 
experimentEntity.getDescription());
         assertEquals(experiment.getExperimentName(), 
experimentEntity.getExperimentName());
         assertEquals(experiment.getGatewayId(), 
experimentEntity.getGatewayId());
-    }
+        assertEquals(experiment.getProjectId(), 
experimentEntity.getProjectId());
+
+        // RunConfiguration
+        assertEquals(experiment.getRunConfigsCount(), 
experimentEntity.getRunConfigs().size());
+        RunConfigurationEntity runConfigEntity = 
experimentEntity.getRunConfigs().get(0);
+
+        // ComputeBackend
+        ComputeBackendEntity computeBackendEntity = 
runConfigEntity.getComputeBackend();
+        assertTrue(computeBackendEntity instanceof ServerBackendEntity);
+        ServerBackendEntity serverBackendEntity = (ServerBackendEntity) 
computeBackendEntity;
+        assertEquals(serverBackend.getHostName(), 
serverBackendEntity.getHostName());
 
+        // ApplicationRunInfo
+        ApplicationRunInfoEntity applicationRunInfoEntity = 
runConfigEntity.getAppRunInfo();
+        ApplicationEntity applicationEntity = 
applicationRunInfoEntity.getApplication();
+        assertEquals(application.getName(), applicationEntity.getName());
+
+        // DataMovementConfiguration
+        assertEquals(runConfiguration.getDataMovementConfigsCount(), 
runConfigEntity.getDataMovementConfigs().size());
+        DataMovementConfigurationEntity dataMovementConfigurationEntity = 
runConfigEntity.getDataMovementConfigs()
+                .get(0);
+        assertEquals(dataMovementConfiguration.getInMovementsCount(),
+                dataMovementConfigurationEntity.getInMovements().size());
+
+        // InDataMovement
+        InDataMovementEntity inDataMovementEntity = 
dataMovementConfigurationEntity.getInMovements().iterator().next();
+        assertEquals(inDataMovement.getInputIndex(), 
inDataMovementEntity.getInputIndex());
+        assertEquals(inDataMovement.getSourceLocation().getStorageId(),
+                inDataMovementEntity.getSourceLocation().getStorageId());
+    }
 }
diff --git 
a/modules/airavata-apis/airavata-apis-stub/src/main/proto/execution/experiment_stub.proto
 
b/modules/airavata-apis/airavata-apis-stub/src/main/proto/execution/experiment_stub.proto
index ab2aeca56f..3da863c02a 100644
--- 
a/modules/airavata-apis/airavata-apis-stub/src/main/proto/execution/experiment_stub.proto
+++ 
b/modules/airavata-apis/airavata-apis-stub/src/main/proto/execution/experiment_stub.proto
@@ -18,6 +18,8 @@
 syntax = "proto3";
 
 option java_multiple_files = true;
+// dozer-proto3 requires the package name to be specified with option 
java_package
+option java_package="org.apache.airavata.api.execution.stubs";
 package org.apache.airavata.api.execution.stubs;
 
 message CommandLineInput {

Reply via email to