Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

create SERVICE_OBJECTS and SERVICE_DEPENDENT_OBJECT table #2494

Open
wants to merge 1 commit into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

/** Implementation of the sStorage. */
/** Implementation of the ServiceChangeRequestStorage. */
@Component
@Transactional
public class DatabaseServiceChangeRequestStorage implements ServiceChangeRequestStorage {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
/*
* SPDX-License-Identifier: Apache-2.0
* SPDX-FileCopyrightText: Huawei Inc.
*
*/

package org.eclipse.xpanse.modules.database.serviceobject;

import java.util.UUID;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;

/** Implementation of the ServiceObjectStorage. */
@Component
@Transactional
public class DatabaseServiceObjectStorage implements ServiceObjectStorage {

private final ServiceObjectRepository repository;

@Autowired
public DatabaseServiceObjectStorage(ServiceObjectRepository repository) {
this.repository = repository;
}

@Override
public ServiceObjectEntity storeAndFlush(ServiceObjectEntity entity) {
return repository.saveAndFlush(entity);
}

@Override
public void delete(ServiceObjectEntity entity) {
repository.delete(entity);
}

@Override
public ServiceObjectEntity getEntityById(UUID objectId) {
return repository.findById(objectId).orElse(null);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
/*
* SPDX-License-Identifier: Apache-2.0
* SPDX-FileCopyrightText: Huawei Inc.
*
*/

package org.eclipse.xpanse.modules.database.serviceobject;

import io.hypersistence.utils.hibernate.type.json.JsonType;
import jakarta.persistence.CollectionTable;
import jakarta.persistence.Column;
import jakarta.persistence.Convert;
import jakarta.persistence.ElementCollection;
import jakarta.persistence.Entity;
import jakarta.persistence.FetchType;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.JoinColumn;
import jakarta.persistence.OneToOne;
import jakarta.persistence.Table;
import java.io.Serial;
import java.io.Serializable;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
import lombok.Data;
import org.eclipse.xpanse.modules.database.common.ObjectJsonConverter;
import org.eclipse.xpanse.modules.database.service.ServiceDeploymentEntity;
import org.hibernate.annotations.Type;

/** ServiceObjectEntity for persistence. */
@Table(name = "SERVICE_OBJECT")
@Entity
@Data
public class ServiceObjectEntity implements Serializable {

@Serial private static final long serialVersionUID = 8759122775257853274L;

@Id
@GeneratedValue(strategy = GenerationType.UUID)
@Column(name = "OBJECT_ID", nullable = false)
private UUID objectId;

@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "SERVICE_ID", nullable = false)
private ServiceDeploymentEntity serviceDeploymentEntity;

@JoinColumn(name = "OBJECT_TYPE", nullable = false)
private String objectType;

@JoinColumn(name = "OBJECT_IDENTIFIER", nullable = false)
private String objectIdentifierName;

@Column(name = "PROPERTIES", columnDefinition = "json", length = Integer.MAX_VALUE)
@Type(value = JsonType.class)
@Convert(converter = ObjectJsonConverter.class)
private Map<String, Object> properties;

@ElementCollection
@CollectionTable(
name = "SERVICE_DEPENDENT_OBJECT",
joinColumns = @JoinColumn(name = "OBJECT_ID", nullable = false))
@Column(name = "DEPENDENT_OBJECT_ID")
private Set<UUID> dependentObjectIds;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
/*
* SPDX-License-Identifier: Apache-2.0
* SPDX-FileCopyrightText: Huawei Inc.
*
*/

package org.eclipse.xpanse.modules.database.serviceobject;

import java.util.UUID;
import org.eclipse.xpanse.modules.database.CustomJpaRepository;
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
import org.springframework.stereotype.Repository;

/** Interface to access default JPA methods. */
@Repository
public interface ServiceObjectRepository
extends CustomJpaRepository<ServiceObjectEntity, UUID>,
JpaSpecificationExecutor<ServiceObjectEntity> {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
/*
* SPDX-License-Identifier: Apache-2.0
* SPDX-FileCopyrightText: Huawei Inc.
*
*/

package org.eclipse.xpanse.modules.database.serviceobject;

import java.util.UUID;

/** Interface for persist of ServiceObjectEntity. */
public interface ServiceObjectStorage {

ServiceObjectEntity storeAndFlush(ServiceObjectEntity entity);

void delete(ServiceObjectEntity entity);

ServiceObjectEntity getEntityById(UUID objectId);
}
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
import lombok.Data;
import org.eclipse.xpanse.modules.database.common.ObjectJsonConverter;
import org.eclipse.xpanse.modules.database.service.ServiceDeploymentEntity;
import org.eclipse.xpanse.modules.database.serviceobject.ServiceObjectEntity;
import org.eclipse.xpanse.modules.models.response.ErrorResponse;
import org.eclipse.xpanse.modules.models.service.enums.Handler;
import org.eclipse.xpanse.modules.models.service.enums.OrderStatus;
Expand Down Expand Up @@ -56,6 +57,10 @@ public class ServiceOrderEntity implements Serializable {
@OnDelete(action = OnDeleteAction.CASCADE)
private ServiceDeploymentEntity serviceDeploymentEntity;

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "OBJECT_ID")
private ServiceObjectEntity serviceObjectEntity;

@Column(name = "PARENT_ORDER_ID")
private UUID parentOrderId;

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
/*
* SPDX-License-Identifier: Apache-2.0
* SPDX-FileCopyrightText: Huawei Inc.
*
*/

package org.eclipse.xpanse.modules.database.serviceobject;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNull;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import java.util.Optional;
import java.util.UUID;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;

/** Test for DatabaseServiceObjectStorage. */
@ExtendWith(MockitoExtension.class)
class DatabaseServiceObjectStorageTest {

@Mock private ServiceObjectRepository repository;

@InjectMocks private DatabaseServiceObjectStorage storage;

private final UUID objectId = UUID.randomUUID();
private final ServiceObjectEntity testEntity = new ServiceObjectEntity();

@BeforeEach
void setUp() {
testEntity.setObjectId(objectId);
}

@Test
void storeAndFlushShouldCallRepositorySaveAndFlush() {
when(repository.saveAndFlush(any(ServiceObjectEntity.class))).thenReturn(testEntity);
ServiceObjectEntity result = storage.storeAndFlush(testEntity);
verify(repository, times(1)).saveAndFlush(testEntity);
assertEquals(testEntity, result);
}

@Test
void deleteShouldCallRepositoryDelete() {
storage.delete(testEntity);
verify(repository, times(1)).delete(testEntity);
}

@Test
void getEntityByIdShouldReturnEntityWhenExists() {
when(repository.findById(objectId)).thenReturn(Optional.of(testEntity));
ServiceObjectEntity result = storage.getEntityById(objectId);
verify(repository, times(1)).findById(objectId);
assertEquals(testEntity, result);
}

@Test
void getEntityByIdShouldReturnNullWhenNotExists() {
when(repository.findById(objectId)).thenReturn(Optional.empty());
ServiceObjectEntity result = storage.getEntityById(objectId);
verify(repository, times(1)).findById(objectId);
assertNull(result);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
/*
* SPDX-License-Identifier: Apache-2.0
* SPDX-FileCopyrightText: Huawei Inc.
*
*/

package org.eclipse.xpanse.modules.database.serviceobject;

import static org.assertj.core.api.Assertions.assertThat;

import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
import org.eclipse.xpanse.modules.database.service.ServiceDeploymentEntity;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.mockito.Mock;
import org.springframework.beans.BeanUtils;

/** Test for ServiceChangeRequestEntity. */
public class ServiceObjectEntityTest {

private final UUID objectId = UUID.randomUUID();
@Mock private ServiceDeploymentEntity serviceDeploymentEntity;
private final String objectType = "ObjectType";
private final String objectIdentifierName = "test";
private final Map<String, Object> properties = Map.of();
private final Set<UUID> dependentObjectIds = new HashSet<>();

private ServiceObjectEntity test;

@BeforeEach
void setUp() {
test = new ServiceObjectEntity();
test.setObjectId(objectId);
test.setServiceDeploymentEntity(serviceDeploymentEntity);
test.setObjectType(objectType);
test.setObjectIdentifierName(objectIdentifierName);
test.setProperties(properties);
test.setDependentObjectIds(dependentObjectIds);
}

@Test
void testGetters() {
assertThat(test.getObjectId()).isEqualTo(objectId);
assertThat(test.getServiceDeploymentEntity()).isEqualTo(serviceDeploymentEntity);
assertThat(test.getObjectType()).isEqualTo(objectType);
assertThat(test.getObjectIdentifierName()).isEqualTo(objectIdentifierName);
assertThat(test.getProperties()).isEqualTo(properties);
assertThat(test.getDependentObjectIds()).isEqualTo(dependentObjectIds);
}

@Test
void testEquals() {
assertThat(test.equals(new Object())).isFalse();
ServiceObjectEntity test1 = new ServiceObjectEntity();
BeanUtils.copyProperties(test, test1);
assertThat(test.equals(test1)).isTrue();
}

@Test
void testHashCode() {
assertThat(test.hashCode() == new Object().hashCode()).isFalse();
ServiceObjectEntity test1 = new ServiceObjectEntity();
BeanUtils.copyProperties(test, test1);
assertThat(test.hashCode() == test1.hashCode()).isTrue();
}

@Test
void testToString() {
String result =
String.format(
"ServiceObjectEntity(objectId=%s, "
+ "serviceDeploymentEntity=%s, "
+ "objectType=%s, "
+ "objectIdentifierName=%s, "
+ "properties=%s, "
+ "dependentObjectIds=%s)",
objectId,
serviceDeploymentEntity,
objectType,
objectIdentifierName,
properties,
dependentObjectIds);

assertThat(test.toString()).isEqualTo(result);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
import java.util.Map;
import java.util.UUID;
import org.eclipse.xpanse.modules.database.service.ServiceDeploymentEntity;
import org.eclipse.xpanse.modules.database.serviceobject.ServiceObjectEntity;
import org.eclipse.xpanse.modules.models.response.ErrorResponse;
import org.eclipse.xpanse.modules.models.service.enums.Handler;
import org.eclipse.xpanse.modules.models.service.enums.OrderStatus;
Expand All @@ -34,6 +35,7 @@ class ServiceOrderEntityTest {
@Mock private Map<String, Object> mockRequestBody;
@Mock private Map<String, Object> mockResultProperties;
@Mock private ServiceDeploymentEntity mockServiceDeploymentEntity;
@Mock private ServiceObjectEntity serviceObjectEntity;

private ServiceOrderEntity test;

Expand All @@ -44,6 +46,7 @@ void setUp() {
test.setParentOrderId(uuid);
test.setWorkflowId(uuid.toString());
test.setServiceDeploymentEntity(mockServiceDeploymentEntity);
test.setServiceObjectEntity(serviceObjectEntity);
test.setOriginalServiceId(uuid);
test.setTaskType(taskType);
test.setUserId(userId);
Expand All @@ -61,6 +64,7 @@ void testGetters() {
assertThat(test.getOrderId()).isEqualTo(uuid);
assertThat(test.getParentOrderId()).isEqualTo(uuid);
assertThat(test.getServiceDeploymentEntity()).isEqualTo(mockServiceDeploymentEntity);
assertThat(test.getServiceObjectEntity()).isEqualTo(serviceObjectEntity);
assertThat(test.getOriginalServiceId()).isEqualTo(uuid);
assertThat(test.getWorkflowId()).isEqualTo(uuid.toString());
assertThat(test.getTaskType()).isEqualTo(taskType);
Expand Down Expand Up @@ -96,6 +100,8 @@ void testToString() {
+ uuid
+ ", serviceDeploymentEntity="
+ mockServiceDeploymentEntity
+ ", serviceObjectEntity="
+ serviceObjectEntity
+ ", parentOrderId="
+ uuid
+ ", workflowId="
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
import org.eclipse.xpanse.modules.database.servicetemplate.ServiceTemplateStorage;
import org.eclipse.xpanse.modules.models.service.deployment.DeployResource;
import org.eclipse.xpanse.modules.models.service.enums.DeployResourceKind;
import org.eclipse.xpanse.modules.models.service.enums.Handler;
import org.eclipse.xpanse.modules.models.service.enums.OrderStatus;
import org.eclipse.xpanse.modules.models.service.order.ServiceOrder;
import org.eclipse.xpanse.modules.models.service.order.enums.ServiceOrderType;
Expand Down Expand Up @@ -182,7 +183,8 @@ private UUID addServiceChangeRequestsForServiceAction(
serviceActionRequest.getActionName()),
deployResourceMap,
actionManageScripts,
ServiceOrderType.SERVICE_ACTION);
ServiceOrderType.SERVICE_ACTION,
Handler.AGENT);
}

/**
Expand Down
Loading
Loading