diff --git a/api/src/main/java/io/keploy/service/GrpcService.java b/api/src/main/java/io/keploy/service/GrpcService.java index 2e12a407..9159bc15 100644 --- a/api/src/main/java/io/keploy/service/GrpcService.java +++ b/api/src/main/java/io/keploy/service/GrpcService.java @@ -40,7 +40,7 @@ public class GrpcService { private static final Logger logger = LogManager.getLogger(GrpcService.class); private static final String CROSS = new String(Character.toChars(0x274C)); - private static RegressionServiceGrpc.RegressionServiceBlockingStub blockingStub = null; + public static RegressionServiceGrpc.RegressionServiceBlockingStub blockingStub = null; private static Keploy k = null; public static ManagedChannel channel; // public static OkHttpClient client; diff --git a/api/src/main/java/io/keploy/service/mock/Config.java b/api/src/main/java/io/keploy/service/mock/Config.java new file mode 100644 index 00000000..31aec124 --- /dev/null +++ b/api/src/main/java/io/keploy/service/mock/Config.java @@ -0,0 +1,25 @@ +package io.keploy.service.mock; + +import io.keploy.regression.Mode; +import io.keploy.regression.context.Context; +import io.keploy.regression.context.Kcontext; + +import java.util.Collections; +import java.util.HashMap; +import java.util.Map; + +public class Config { + + public static Mode mode; + + public static String Name = ""; + + public static Kcontext CTX = Context.getCtx(); + + public static String Path = ""; + + public static Boolean Overwrite = false; + public static Map MockId = Collections.synchronizedMap(new HashMap<>()); + public static String MockPath = ""; + +} diff --git a/api/src/main/java/io/keploy/service/mock/MockLib.java b/api/src/main/java/io/keploy/service/mock/MockLib.java new file mode 100644 index 00000000..27c08bcd --- /dev/null +++ b/api/src/main/java/io/keploy/service/mock/MockLib.java @@ -0,0 +1,57 @@ +package io.keploy.service.mock; + +import io.keploy.grpc.stubs.Service; +import io.keploy.regression.context.Context; +import io.keploy.regression.context.Kcontext; +import io.keploy.service.GrpcService; +import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; + +import java.util.List; + +import static io.keploy.service.GrpcService.blockingStub; + +public class MockLib { + private static final Logger logger = LogManager.getLogger(MockLib.class); + + + public MockLib() { + Kcontext kctx = Context.getCtx(); + new GrpcService(); + } + + + public static boolean StartRecordingMocks(Kcontext kctx, String path, String mode, String name, Boolean overWrite) { + Service.StartMockReq startMockReq = Service.StartMockReq.newBuilder().setMode(mode).setPath(path).build(); + Service.StartMockResp startMockResp = blockingStub.startMocking(startMockReq); + if (startMockResp == null) { // TODO - check how to handle this error + logger.error("Failed to make StartMocking grpc call to keploy server" + name + " mock"); + return false; + } + return startMockResp.getExists(); + } + + public static List GetAllMocks(Service.GetMockReq getMockReq) { + final Service.getMockResp resp = blockingStub.getMocks(getMockReq); + if (resp != null) { + return resp.getMocksList(); + } + + logger.error("returned nil as array mocks from keploy server"); + return null; + } + + public static boolean PutMock(String path, Service.Mock mock) { + + Service.PutMockReq putMockReq = Service.PutMockReq.newBuilder().setMock(mock).setPath(path).build(); + Service.PutMockResp putMockResp = blockingStub.putMock(putMockReq); + if (putMockResp == null) { // check iska error handle + logger.error("Failed to call the putMock method"); + return false; + } + return true; + } + + + +} diff --git a/common/src/main/java/io/keploy/utils/ProcessSQL.java b/common/src/main/java/io/keploy/utils/ProcessSQL.java index d66859ec..5fd1a870 100644 --- a/common/src/main/java/io/keploy/utils/ProcessSQL.java +++ b/common/src/main/java/io/keploy/utils/ProcessSQL.java @@ -47,7 +47,6 @@ public static Service.Table ProcessDep(Map meta, Service.Table t Service.Mock.SpecSchema specSchema = null; specSchema = Service.Mock.SpecSchema.newBuilder().putAllMetadata(meta).setInt(id).setTable(table).setType("TABLE").build(); -// } Service.Mock mock = Service.Mock.newBuilder() .setVersion(Mock.Version.V1_BETA1.value) diff --git a/integration/src/main/java/io/keploy/googleMaps/GoogleMapsInterceptor.java b/integration/src/main/java/io/keploy/googleMaps/GoogleMapsInterceptor.java index f7d6fece..766e76a4 100644 --- a/integration/src/main/java/io/keploy/googleMaps/GoogleMapsInterceptor.java +++ b/integration/src/main/java/io/keploy/googleMaps/GoogleMapsInterceptor.java @@ -10,6 +10,9 @@ import io.keploy.regression.Mode; import io.keploy.regression.context.Context; import io.keploy.regression.context.Kcontext; +import io.keploy.service.GrpcService; +import io.keploy.service.mock.Config; +import io.keploy.service.mock.MockLib; import io.keploy.utils.HttpStatusReasons; import net.bytebuddy.implementation.bind.annotation.*; import okhttp3.*; @@ -216,6 +219,17 @@ public static Object execute( .setSpec(specSchema) .build(); + // for mock library + new GrpcService(); // to initialize the grpcClient + if (GrpcService.blockingStub != null && kctx.getFileExport() && !Config.MockId.containsKey(kctx.getTestId())) { + final boolean recorded = MockLib.PutMock(Config.MockPath, httpMock); + String CAPTURE = "\uD83D\uDFE0"; + if (recorded) { + logger.info(CAPTURE + " Captured the mocked outputs for Http dependency call with meta: {}", meta); + } + return response; + } + kctx.getMock().add(httpMock); return responseObject; default: diff --git a/integration/src/main/java/io/keploy/httpClients/ApacheInterceptor.java b/integration/src/main/java/io/keploy/httpClients/ApacheInterceptor.java index 805731a4..e07a191b 100644 --- a/integration/src/main/java/io/keploy/httpClients/ApacheInterceptor.java +++ b/integration/src/main/java/io/keploy/httpClients/ApacheInterceptor.java @@ -5,11 +5,13 @@ import io.keploy.grpc.stubs.Service; import io.keploy.regression.KeployInstance; import io.keploy.regression.Mock; +import io.keploy.regression.Mode; import io.keploy.regression.context.Context; import io.keploy.regression.context.Kcontext; -import io.keploy.regression.Mode; import io.keploy.regression.keploy.Keploy; import io.keploy.service.GrpcService; +import io.keploy.service.mock.Config; +import io.keploy.service.mock.MockLib; import io.keploy.utils.MagicBytes; import io.keploy.utils.MultipartContent; import io.keploy.utils.Utility; @@ -257,6 +259,25 @@ public static CloseableHttpResponse doProceed(@Origin Method method, @SuperCall .setSpec(specSchema) .build(); +// if internal.GetGrpcClient() != nil && kctx.FileExport && internal.MockId.Unique(kctx.TestID) { +// recorded := internal.PutMock(context.Background(), internal.MockPath, httpMock) +// if recorded { +// fmt.Println("🟠 Captured the mocked outputs for Http dependency call with meta: ", meta) +// } +// return resp, err +// } + + // for mock library + new GrpcService(); // to initialize the grpcClient + if (GrpcService.blockingStub != null && kctx.getFileExport() && !Config.MockId.containsKey(kctx.getTestId())) { + final boolean recorded = MockLib.PutMock(Config.MockPath, httpMock); + String CAPTURE = "\uD83D\uDFE0"; + if (recorded) { + logger.info(CAPTURE + " Captured the mocked outputs for Http dependency call with meta: {}", meta); + } + return response; + } + kctx.getMock().add(httpMock); return response; default: diff --git a/integration/src/main/java/io/keploy/httpClients/OkHttpInterceptor_Kotlin.java b/integration/src/main/java/io/keploy/httpClients/OkHttpInterceptor_Kotlin.java index cbe62d79..b1e0601b 100644 --- a/integration/src/main/java/io/keploy/httpClients/OkHttpInterceptor_Kotlin.java +++ b/integration/src/main/java/io/keploy/httpClients/OkHttpInterceptor_Kotlin.java @@ -8,6 +8,9 @@ import io.keploy.regression.context.Kcontext; import io.keploy.regression.Mock; import io.keploy.regression.Mode; +import io.keploy.service.GrpcService; +import io.keploy.service.mock.Config; +import io.keploy.service.mock.MockLib; import io.keploy.utils.HttpStatusReasons; import okhttp3.*; import okio.Buffer; @@ -161,6 +164,17 @@ public Response intercept(Chain chain) throws IOException { .setSpec(specSchema) .build(); + // for mock library + new GrpcService(); // to initialize the grpcClient + if (GrpcService.blockingStub != null && kctx.getFileExport() && !Config.MockId.containsKey(kctx.getTestId())) { + final boolean recorded = MockLib.PutMock(Config.MockPath, httpMock); + String CAPTURE = "\uD83D\uDFE0"; + if (recorded) { + logger.info(CAPTURE + " Captured the mocked outputs for Http dependency call with meta: {}", meta); + } + return response; + } + kctx.getMock().add(httpMock); return response; default: