From e1da1354d2fe671d4d38890618694bbb8bb45800 Mon Sep 17 00:00:00 2001 From: Sebastian Becker Date: Mon, 13 Dec 2021 13:47:30 +0100 Subject: [PATCH 1/4] Add tests to cover issue Signed-off-by: Sebastian Becker --- .../CreateReservationSupplierTest.java | 67 ++++++++++++++----- 1 file changed, 51 insertions(+), 16 deletions(-) diff --git a/castor-service/src/test/java/io/carbynestack/castor/service/download/CreateReservationSupplierTest.java b/castor-service/src/test/java/io/carbynestack/castor/service/download/CreateReservationSupplierTest.java index e4629bd..407a2ed 100644 --- a/castor-service/src/test/java/io/carbynestack/castor/service/download/CreateReservationSupplierTest.java +++ b/castor-service/src/test/java/io/carbynestack/castor/service/download/CreateReservationSupplierTest.java @@ -7,13 +7,6 @@ package io.carbynestack.castor.service.download; -import static io.carbynestack.castor.common.entities.TupleType.INPUT_MASK_GFP; -import static io.carbynestack.castor.service.download.CreateReservationSupplier.*; -import static java.util.Collections.singletonList; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertThrows; -import static org.mockito.Mockito.*; - import io.carbynestack.castor.client.download.CastorInterVcpClient; import io.carbynestack.castor.common.entities.Reservation; import io.carbynestack.castor.common.entities.ReservationElement; @@ -22,13 +15,23 @@ import io.carbynestack.castor.service.persistence.cache.ReservationCachingService; import io.carbynestack.castor.service.persistence.markerstore.TupleChunkMetaDataEntity; import io.carbynestack.castor.service.persistence.markerstore.TupleChunkMetaDataStorageService; -import java.util.UUID; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; +import java.util.Arrays; +import java.util.List; +import java.util.UUID; + +import static io.carbynestack.castor.common.entities.TupleType.INPUT_MASK_GFP; +import static io.carbynestack.castor.service.download.CreateReservationSupplier.*; +import static java.util.Collections.singletonList; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertThrows; +import static org.mockito.Mockito.*; + @RunWith(MockitoJUnitRunner.class) public class CreateReservationSupplierTest { @Mock private CastorInterVcpClient castorInterVcpClientMock; @@ -111,21 +114,53 @@ public void givenSharingReservationFails_whenGet_thenThrowCastorServiceException } @Test - public void givenSuccessfulRequest_whenGet_thenReturnExpectedReservation() { - TupleChunkMetaDataEntity metaDataEntityMock = mock(TupleChunkMetaDataEntity.class); - UUID chunkId = UUID.fromString("c8a0a467-16b0-4f03-b7d7-07cbe1b0e7e8"); + public void givenMultipleChunksWithAvailable_whenGet_thenReturnExpectedReservation() { + TupleChunkMetaDataEntity metaDataEntity1Mock = mock(TupleChunkMetaDataEntity.class); + TupleChunkMetaDataEntity metaDataEntity2Mock = mock(TupleChunkMetaDataEntity.class); + UUID chunk1Id = UUID.fromString("c8a0a467-16b0-4f03-b7d7-07cbe1b0e7e8"); + UUID chunk2Id = UUID.fromString("4d206204-96a0-4ddc-b409-4ac05b1f12f2"); long reservedMarker = 0; ReservationElement expectedReservationElement = - new ReservationElement(chunkId, count, reservedMarker); + new ReservationElement(chunk1Id, count, reservedMarker); Reservation expectedReservation = new Reservation(reservationId, tupleType, singletonList(expectedReservationElement)); when(tupleChunkMetaDataStorageServiceMock.getAvailableTuples(tupleType)).thenReturn(count); when(tupleChunkMetaDataStorageServiceMock.getTupleChunkData(tupleType)) - .thenReturn(singletonList(metaDataEntityMock)); - when(metaDataEntityMock.getTupleChunkId()).thenReturn(chunkId); - when(metaDataEntityMock.getReservedMarker()).thenReturn(reservedMarker); - when(metaDataEntityMock.getNumberOfTuples()).thenReturn(count); + .thenReturn(Arrays.asList(metaDataEntity1Mock, metaDataEntity2Mock)); + when(metaDataEntity1Mock.getTupleChunkId()).thenReturn(chunk1Id); + when(metaDataEntity1Mock.getReservedMarker()).thenReturn(reservedMarker); + when(metaDataEntity1Mock.getNumberOfTuples()).thenReturn(count); + when(metaDataEntity2Mock.getTupleChunkId()).thenReturn(chunk2Id); + when(metaDataEntity2Mock.getReservedMarker()).thenReturn(reservedMarker); + when(metaDataEntity2Mock.getNumberOfTuples()).thenReturn(count); + when(castorInterVcpClientMock.shareReservation(expectedReservation)).thenReturn(true); + + assertEquals(expectedReservation, createReservationSupplier.get()); + verify(reservationCachingServiceMock).keepReservation(expectedReservation); + } + + @Test + public void givenFirstChunkHasNotEnoughTuples_whenGet_thenCreateReservationReferencingMultipleChunks() {TupleChunkMetaDataEntity metaDataEntity1Mock = mock(TupleChunkMetaDataEntity.class); + TupleChunkMetaDataEntity metaDataEntity2Mock = mock(TupleChunkMetaDataEntity.class); + UUID chunk1Id = UUID.fromString("c8a0a467-16b0-4f03-b7d7-07cbe1b0e7e8"); + UUID chunk2Id = UUID.fromString("4d206204-96a0-4ddc-b409-4ac05b1f12f2"); + long reservedMarker = 0; + List expectedReservationElements = Arrays.asList( + new ReservationElement(chunk1Id, count-1, reservedMarker), + new ReservationElement(chunk2Id, 1, reservedMarker)); + Reservation expectedReservation = + new Reservation(reservationId, tupleType, expectedReservationElements); + + when(tupleChunkMetaDataStorageServiceMock.getAvailableTuples(tupleType)).thenReturn(count); + when(tupleChunkMetaDataStorageServiceMock.getTupleChunkData(tupleType)) + .thenReturn(Arrays.asList(metaDataEntity1Mock, metaDataEntity2Mock)); + when(metaDataEntity1Mock.getTupleChunkId()).thenReturn(chunk1Id); + when(metaDataEntity1Mock.getReservedMarker()).thenReturn(reservedMarker); + when(metaDataEntity1Mock.getNumberOfTuples()).thenReturn(count-1); + when(metaDataEntity2Mock.getTupleChunkId()).thenReturn(chunk2Id); + when(metaDataEntity2Mock.getReservedMarker()).thenReturn(reservedMarker); + when(metaDataEntity2Mock.getNumberOfTuples()).thenReturn(count); when(castorInterVcpClientMock.shareReservation(expectedReservation)).thenReturn(true); assertEquals(expectedReservation, createReservationSupplier.get()); From 76482c2811059ef4c6aa1cb04642016f2c2ca5d5 Mon Sep 17 00:00:00 2001 From: Sebastian Becker Date: Mon, 13 Dec 2021 14:03:51 +0100 Subject: [PATCH 2/4] Add check to break loop through available tuple chunks Signed-off-by: Sebastian Becker --- .../castor/service/download/CreateReservationSupplier.java | 3 +++ .../castor/service/download/CreateReservationSupplierTest.java | 3 --- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/castor-service/src/main/java/io/carbynestack/castor/service/download/CreateReservationSupplier.java b/castor-service/src/main/java/io/carbynestack/castor/service/download/CreateReservationSupplier.java index 2a96d69..01251d1 100644 --- a/castor-service/src/main/java/io/carbynestack/castor/service/download/CreateReservationSupplier.java +++ b/castor-service/src/main/java/io/carbynestack/castor/service/download/CreateReservationSupplier.java @@ -89,6 +89,9 @@ private List composeElements(TupleType tupleType, long numbe new ReservationElement( tupleChunkData.getTupleChunkId(), tuplesToRead, tupleChunkData.getReservedMarker())); stillToReserve -= tuplesToRead; + if(stillToReserve == 0) { + break; + } } if (stillToReserve > 0) { throw new CastorServiceException( diff --git a/castor-service/src/test/java/io/carbynestack/castor/service/download/CreateReservationSupplierTest.java b/castor-service/src/test/java/io/carbynestack/castor/service/download/CreateReservationSupplierTest.java index 407a2ed..10f67a3 100644 --- a/castor-service/src/test/java/io/carbynestack/castor/service/download/CreateReservationSupplierTest.java +++ b/castor-service/src/test/java/io/carbynestack/castor/service/download/CreateReservationSupplierTest.java @@ -131,9 +131,6 @@ public void givenMultipleChunksWithAvailable_whenGet_thenReturnExpectedReservati when(metaDataEntity1Mock.getTupleChunkId()).thenReturn(chunk1Id); when(metaDataEntity1Mock.getReservedMarker()).thenReturn(reservedMarker); when(metaDataEntity1Mock.getNumberOfTuples()).thenReturn(count); - when(metaDataEntity2Mock.getTupleChunkId()).thenReturn(chunk2Id); - when(metaDataEntity2Mock.getReservedMarker()).thenReturn(reservedMarker); - when(metaDataEntity2Mock.getNumberOfTuples()).thenReturn(count); when(castorInterVcpClientMock.shareReservation(expectedReservation)).thenReturn(true); assertEquals(expectedReservation, createReservationSupplier.get()); From c045817ae6e16ce7c61fd8f6bb5b2845365b6d32 Mon Sep 17 00:00:00 2001 From: Sebastian Becker Date: Mon, 13 Dec 2021 14:09:18 +0100 Subject: [PATCH 3/4] Apply code formatting rules Signed-off-by: Sebastian Becker --- .../download/CreateReservationSupplier.java | 2 +- .../CreateReservationSupplierTest.java | 36 ++++++++++--------- 2 files changed, 20 insertions(+), 18 deletions(-) diff --git a/castor-service/src/main/java/io/carbynestack/castor/service/download/CreateReservationSupplier.java b/castor-service/src/main/java/io/carbynestack/castor/service/download/CreateReservationSupplier.java index 01251d1..4fff618 100644 --- a/castor-service/src/main/java/io/carbynestack/castor/service/download/CreateReservationSupplier.java +++ b/castor-service/src/main/java/io/carbynestack/castor/service/download/CreateReservationSupplier.java @@ -89,7 +89,7 @@ private List composeElements(TupleType tupleType, long numbe new ReservationElement( tupleChunkData.getTupleChunkId(), tuplesToRead, tupleChunkData.getReservedMarker())); stillToReserve -= tuplesToRead; - if(stillToReserve == 0) { + if (stillToReserve == 0) { break; } } diff --git a/castor-service/src/test/java/io/carbynestack/castor/service/download/CreateReservationSupplierTest.java b/castor-service/src/test/java/io/carbynestack/castor/service/download/CreateReservationSupplierTest.java index 10f67a3..4068a38 100644 --- a/castor-service/src/test/java/io/carbynestack/castor/service/download/CreateReservationSupplierTest.java +++ b/castor-service/src/test/java/io/carbynestack/castor/service/download/CreateReservationSupplierTest.java @@ -7,6 +7,13 @@ package io.carbynestack.castor.service.download; +import static io.carbynestack.castor.common.entities.TupleType.INPUT_MASK_GFP; +import static io.carbynestack.castor.service.download.CreateReservationSupplier.*; +import static java.util.Collections.singletonList; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertThrows; +import static org.mockito.Mockito.*; + import io.carbynestack.castor.client.download.CastorInterVcpClient; import io.carbynestack.castor.common.entities.Reservation; import io.carbynestack.castor.common.entities.ReservationElement; @@ -15,23 +22,15 @@ import io.carbynestack.castor.service.persistence.cache.ReservationCachingService; import io.carbynestack.castor.service.persistence.markerstore.TupleChunkMetaDataEntity; import io.carbynestack.castor.service.persistence.markerstore.TupleChunkMetaDataStorageService; +import java.util.Arrays; +import java.util.List; +import java.util.UUID; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; -import java.util.Arrays; -import java.util.List; -import java.util.UUID; - -import static io.carbynestack.castor.common.entities.TupleType.INPUT_MASK_GFP; -import static io.carbynestack.castor.service.download.CreateReservationSupplier.*; -import static java.util.Collections.singletonList; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertThrows; -import static org.mockito.Mockito.*; - @RunWith(MockitoJUnitRunner.class) public class CreateReservationSupplierTest { @Mock private CastorInterVcpClient castorInterVcpClientMock; @@ -138,23 +137,26 @@ public void givenMultipleChunksWithAvailable_whenGet_thenReturnExpectedReservati } @Test - public void givenFirstChunkHasNotEnoughTuples_whenGet_thenCreateReservationReferencingMultipleChunks() {TupleChunkMetaDataEntity metaDataEntity1Mock = mock(TupleChunkMetaDataEntity.class); + public void + givenFirstChunkHasNotEnoughTuples_whenGet_thenCreateReservationReferencingMultipleChunks() { + TupleChunkMetaDataEntity metaDataEntity1Mock = mock(TupleChunkMetaDataEntity.class); TupleChunkMetaDataEntity metaDataEntity2Mock = mock(TupleChunkMetaDataEntity.class); UUID chunk1Id = UUID.fromString("c8a0a467-16b0-4f03-b7d7-07cbe1b0e7e8"); UUID chunk2Id = UUID.fromString("4d206204-96a0-4ddc-b409-4ac05b1f12f2"); long reservedMarker = 0; - List expectedReservationElements = Arrays.asList( - new ReservationElement(chunk1Id, count-1, reservedMarker), + List expectedReservationElements = + Arrays.asList( + new ReservationElement(chunk1Id, count - 1, reservedMarker), new ReservationElement(chunk2Id, 1, reservedMarker)); Reservation expectedReservation = - new Reservation(reservationId, tupleType, expectedReservationElements); + new Reservation(reservationId, tupleType, expectedReservationElements); when(tupleChunkMetaDataStorageServiceMock.getAvailableTuples(tupleType)).thenReturn(count); when(tupleChunkMetaDataStorageServiceMock.getTupleChunkData(tupleType)) - .thenReturn(Arrays.asList(metaDataEntity1Mock, metaDataEntity2Mock)); + .thenReturn(Arrays.asList(metaDataEntity1Mock, metaDataEntity2Mock)); when(metaDataEntity1Mock.getTupleChunkId()).thenReturn(chunk1Id); when(metaDataEntity1Mock.getReservedMarker()).thenReturn(reservedMarker); - when(metaDataEntity1Mock.getNumberOfTuples()).thenReturn(count-1); + when(metaDataEntity1Mock.getNumberOfTuples()).thenReturn(count - 1); when(metaDataEntity2Mock.getTupleChunkId()).thenReturn(chunk2Id); when(metaDataEntity2Mock.getReservedMarker()).thenReturn(reservedMarker); when(metaDataEntity2Mock.getNumberOfTuples()).thenReturn(count); From 721abbe940f8d362007c87d37ee15a8672914e5c Mon Sep 17 00:00:00 2001 From: Sebastian Becker Date: Mon, 13 Dec 2021 14:23:43 +0100 Subject: [PATCH 4/4] Remove unused variable Signed-off-by: Sebastian Becker --- .../castor/service/download/CreateReservationSupplierTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/castor-service/src/test/java/io/carbynestack/castor/service/download/CreateReservationSupplierTest.java b/castor-service/src/test/java/io/carbynestack/castor/service/download/CreateReservationSupplierTest.java index 4068a38..a14f5da 100644 --- a/castor-service/src/test/java/io/carbynestack/castor/service/download/CreateReservationSupplierTest.java +++ b/castor-service/src/test/java/io/carbynestack/castor/service/download/CreateReservationSupplierTest.java @@ -117,7 +117,6 @@ public void givenMultipleChunksWithAvailable_whenGet_thenReturnExpectedReservati TupleChunkMetaDataEntity metaDataEntity1Mock = mock(TupleChunkMetaDataEntity.class); TupleChunkMetaDataEntity metaDataEntity2Mock = mock(TupleChunkMetaDataEntity.class); UUID chunk1Id = UUID.fromString("c8a0a467-16b0-4f03-b7d7-07cbe1b0e7e8"); - UUID chunk2Id = UUID.fromString("4d206204-96a0-4ddc-b409-4ac05b1f12f2"); long reservedMarker = 0; ReservationElement expectedReservationElement = new ReservationElement(chunk1Id, count, reservedMarker);