diff --git a/sdk/communication/azure-communication-callingserver/src/main/java/com/azure/communication/callingserver/CallAsyncClient.java b/sdk/communication/azure-communication-callingserver/src/main/java/com/azure/communication/callingserver/CallAsyncClient.java index 2fe2f840d652..58a6e0c49aa1 100644 --- a/sdk/communication/azure-communication-callingserver/src/main/java/com/azure/communication/callingserver/CallAsyncClient.java +++ b/sdk/communication/azure-communication-callingserver/src/main/java/com/azure/communication/callingserver/CallAsyncClient.java @@ -30,6 +30,7 @@ import com.azure.core.annotation.ServiceMethod; import com.azure.core.http.rest.Response; import com.azure.core.http.rest.SimpleResponse; +import com.azure.core.util.Context; import com.azure.core.util.logging.ClientLogger; import reactor.core.publisher.Mono; @@ -39,6 +40,7 @@ import java.util.stream.Collectors; import static com.azure.core.util.FluxUtil.monoError; +import static com.azure.core.util.FluxUtil.withContext; /** * Async client that supports server call operations. @@ -89,17 +91,28 @@ public Mono createCall(CommunicationIdentifier source, Iterabl @ServiceMethod(returns = ReturnType.SINGLE) public Mono> createCallWithResponse(CommunicationIdentifier source, Iterable targets, CreateCallOptions createCallOptions) { + return createCallWithResponse(source, targets, createCallOptions, null); + } + + Mono> createCallWithResponse(CommunicationIdentifier source, + Iterable targets, CreateCallOptions createCallOptions, Context context) { try { Objects.requireNonNull(source, "'source' cannot be null."); Objects.requireNonNull(targets, "'targets' cannot be null."); Objects.requireNonNull(createCallOptions, "'CreateCallOptions' cannot be null."); CreateCallRequestInternal request = createCreateCallRequest(source, targets, createCallOptions); - return this.callClient.createCallWithResponseAsync(request) - .flatMap((Response response) -> { - CreateCallResult createCallResult = convertCreateCallWithResponse(response.getValue()); - return Mono.just(new SimpleResponse<>(response, createCallResult)); - }); + + return withContext(contextValue -> { + if (context != null) { + contextValue = context; + } + return this.callClient.createCallWithResponseAsync(request) + .flatMap((Response response) -> { + CreateCallResult createCallResult = convertCreateCallWithResponse(response.getValue()); + return Mono.just(new SimpleResponse<>(response, createCallResult)); + }); + }); } catch (RuntimeException ex) { return monoError(logger, ex); } @@ -137,14 +150,22 @@ public Mono playAudio(String callId, PlayAudioRequest request) */ @ServiceMethod(returns = ReturnType.SINGLE) public Mono> playAudioWithResponse(String callId, PlayAudioRequest request) { + return playAudioWithResponse(callId, request, null); + } + + Mono> playAudioWithResponse(String callId, PlayAudioRequest request, Context context) { try { Objects.requireNonNull(callId, "'callId' cannot be null."); Objects.requireNonNull(request, "'request' cannot be null."); - - return this.callClient.playAudioWithResponseAsync(callId, convertPlayAudioRequest(request)).flatMap(( - Response response) -> { - PlayAudioResult playAudioResult = convertPlayAudioResponse(response.getValue()); - return Mono.just(new SimpleResponse<>(response, playAudioResult)); + return withContext(contextValue -> { + if (context != null) { + contextValue = context; + } + return this.callClient.playAudioWithResponseAsync(callId, convertPlayAudioRequest(request)).flatMap(( + Response response) -> { + PlayAudioResult playAudioResult = convertPlayAudioResponse(response.getValue()); + return Mono.just(new SimpleResponse<>(response, playAudioResult)); + }); }); } catch (RuntimeException ex) { return monoError(logger, ex); @@ -176,10 +197,18 @@ public Mono hangupCall(String callId) { */ @ServiceMethod(returns = ReturnType.SINGLE) public Mono> hangupCallWithResponse(String callId) { + return hangupCallWithResponse(callId, null); + } + + Mono> hangupCallWithResponse(String callId, Context context) { try { Objects.requireNonNull(callId, "'callId' cannot be null."); - - return this.callClient.hangupCallWithResponseAsync(callId); + return withContext(contextValue -> { + if (context != null) { + contextValue = context; + } + return this.callClient.hangupCallWithResponseAsync(callId); + }); } catch (RuntimeException ex) { return monoError(logger, ex); } @@ -210,14 +239,22 @@ public Mono deleteCall(String callId) { */ @ServiceMethod(returns = ReturnType.SINGLE) public Mono> deleteCallWithResponse(String callId) { + return deleteCallWithResponse(callId, null); + } + + Mono> deleteCallWithResponse(String callId, Context context) { try { Objects.requireNonNull(callId, "'callId' cannot be null."); - - return this.callClient.deleteCallWithResponseAsync(callId); + return withContext(contextValue -> { + if (context != null) { + contextValue = context; + } + return this.callClient.deleteCallWithResponseAsync(callId); + }); } catch (RuntimeException ex) { return monoError(logger, ex); } - } + } /** * Cancel Media Processing. @@ -255,18 +292,27 @@ public Mono cancelMediaProcessing(String callId, @ServiceMethod(returns = ReturnType.SINGLE) public Mono> cancelMediaProcessingWithResponse(String callId, CancelMediaProcessingRequest request) { + return cancelMediaProcessingWithResponse(callId, request, null); + } + + Mono> cancelMediaProcessingWithResponse(String callId, + CancelMediaProcessingRequest request, Context context) { try { Objects.requireNonNull(callId, "'callId' cannot be null."); Objects.requireNonNull(request, "'request' cannot be null."); - - return this.callClient - .cancelMediaProcessingWithResponseAsync(callId, convertCancelMediaProcessingRequest(request)) - .flatMap(( - Response response) -> { - CancelMediaProcessingResult cancelMediaProcessingResult = convertCancelMediaProcessingResponse( - response.getValue()); - return Mono.just(new SimpleResponse<>(response, cancelMediaProcessingResult)); - }); + return withContext(contextValue -> { + if (context != null) { + contextValue = context; + } + return this.callClient + .cancelMediaProcessingWithResponseAsync(callId, convertCancelMediaProcessingRequest(request)) + .flatMap(( + Response response) -> { + CancelMediaProcessingResult cancelMediaProcessingResult = convertCancelMediaProcessingResponse( + response.getValue()); + return Mono.just(new SimpleResponse<>(response, cancelMediaProcessingResult)); + }); + }); } catch (RuntimeException ex) { return monoError(logger, ex); } @@ -300,12 +346,20 @@ public Mono inviteParticipants(String callId, InviteParticipantsRequest re */ @ServiceMethod(returns = ReturnType.SINGLE) public Mono> inviteParticipantsWithResponse(String callId, InviteParticipantsRequest request) { + return inviteParticipantsWithResponse(callId, request, null); + } + + Mono> inviteParticipantsWithResponse(String callId, InviteParticipantsRequest request, Context context) { try { Objects.requireNonNull(callId, "'callId' cannot be null."); Objects.requireNonNull(request, "'request' cannot be null."); - - return this.callClient.inviteParticipantsWithResponseAsync(callId, - InviteParticipantsRequestConverter.convert(request)); + return withContext(contextValue -> { + if (context != null) { + contextValue = context; + } + return this.callClient.inviteParticipantsWithResponseAsync(callId, + InviteParticipantsRequestConverter.convert(request)); + }); } catch (RuntimeException ex) { return monoError(logger, ex); } @@ -339,11 +393,22 @@ public Mono removeParticipant(String callId, String participantId) { */ @ServiceMethod(returns = ReturnType.SINGLE) public Mono> removeParticipantWithResponse(String callId, String participantId) { + return removeParticipantWithResponse(callId, participantId, null); + } + + /** + * cancelMediaProcessingWithResponse method for use by sync client + */ + Mono> removeParticipantWithResponse(String callId, String participantId, Context context) { try { Objects.requireNonNull(callId, "'callId' cannot be null."); Objects.requireNonNull(participantId, "'request' cannot be null."); - - return this.callClient.removeParticipantWithResponseAsync(callId, participantId); + return withContext(contextValue -> { + if (context != null) { + contextValue = context; + } + return this.callClient.removeParticipantWithResponseAsync(callId, participantId); + }); } catch (RuntimeException ex) { return monoError(logger, ex); } diff --git a/sdk/communication/azure-communication-callingserver/src/main/java/com/azure/communication/callingserver/CallClient.java b/sdk/communication/azure-communication-callingserver/src/main/java/com/azure/communication/callingserver/CallClient.java index 795f4ce53122..941340bbfe16 100644 --- a/sdk/communication/azure-communication-callingserver/src/main/java/com/azure/communication/callingserver/CallClient.java +++ b/sdk/communication/azure-communication-callingserver/src/main/java/com/azure/communication/callingserver/CallClient.java @@ -14,6 +14,7 @@ import com.azure.core.annotation.ServiceClient; import com.azure.core.annotation.ServiceMethod; import com.azure.core.http.rest.Response; +import com.azure.core.util.Context; /** * Sync Client that supports server call operations. @@ -45,11 +46,12 @@ public CreateCallResult createCall(CommunicationIdentifier source, Iterable createCallWithResponse(CommunicationIdentifier source, Iterable targets, CreateCallOptions createCallOptions) { - return callAsyncClient.createCallWithResponse(source, targets, createCallOptions).block(); + public Response createCallWithResponse(CommunicationIdentifier source, Iterable targets, CreateCallOptions createCallOptions, Context context) { + return callAsyncClient.createCallWithResponse(source, targets, createCallOptions, context).block(); } /** @@ -69,23 +71,6 @@ public PlayAudioResult playAudio(String callId, String audioFileUri, boolean loo return callAsyncClient.playAudio(callId, playAudioRequest).block(); } - /** - * Play audio in a call. - * - * @param callId The call id. - * @param audioFileUri The media resource uri of the play audio request. - * @param loop The flag indicating whether audio file needs to be played in loop or not. - * @param audioFileId An id for the media in the AudioFileUri, using which we cache the media. - * @param operationContext The value to identify context of the operation. - * @return the response payload for play audio operation. - */ - @ServiceMethod(returns = ReturnType.SINGLE) - public Response playAudioWithResponse(String callId, String audioFileUri, boolean loop, String audioFileId, String operationContext) { - PlayAudioRequest playAudioRequest = new PlayAudioRequest(). - setAudioFileUri(audioFileUri).setLoop(loop).setAudioFileId(audioFileId).setOperationContext(operationContext); - return callAsyncClient.playAudioWithResponse(callId, playAudioRequest).block(); - } - /** * Play audio in a call. * @@ -102,12 +87,18 @@ public PlayAudioResult playAudio(String callId, PlayAudioRequest playAudioReques * Play audio in a call. * * @param callId The call id. - * @param playAudioRequest Play audio request. + * @param audioFileUri The media resource uri of the play audio request. + * @param loop The flag indicating whether audio file needs to be played in loop or not. + * @param audioFileId An id for the media in the AudioFileUri, using which we cache the media. + * @param operationContext The value to identify context of the operation. + * @param context A {@link Context} representing the request context. * @return the response payload for play audio operation. */ @ServiceMethod(returns = ReturnType.SINGLE) - public Response playAudioWithResponse(String callId, PlayAudioRequest playAudioRequest) { - return callAsyncClient.playAudioWithResponse(callId, playAudioRequest).block(); + public Response playAudioWithResponse(String callId, String audioFileUri, boolean loop, String audioFileId, String operationContext, Context context) { + PlayAudioRequest playAudioRequest = new PlayAudioRequest(). + setAudioFileUri(audioFileUri).setLoop(loop).setAudioFileId(audioFileId).setOperationContext(operationContext); + return callAsyncClient.playAudioWithResponse(callId, playAudioRequest, context).block(); } /** @@ -125,11 +116,12 @@ public Void hangupCall(String callId) { * Disconnect the current caller in a Group-call or end a p2p-call. * * @param callId Call id to to hang up. + * @param context A {@link Context} representing the request context. * @return response for a successful HangupCall request. */ @ServiceMethod(returns = ReturnType.SINGLE) - public Response hangupCallWithResponse(String callId) { - return callAsyncClient.hangupCallWithResponse(callId).block(); + public Response hangupCallWithResponse(String callId, Context context) { + return callAsyncClient.hangupCallWithResponse(callId, context).block(); } /** @@ -147,11 +139,12 @@ public Void deleteCall(String callId) { * Deletes a call. * * @param callId Call id to delete. + * @param context A {@link Context} representing the request context. * @return response for a successful DeleteCall request. */ @ServiceMethod(returns = ReturnType.SINGLE) - public Response deleteCallWithResponse(String callId) { - return callAsyncClient.deleteCallWithResponse(callId).block(); + public Response deleteCallWithResponse(String callId, Context context) { + return callAsyncClient.deleteCallWithResponse(callId, context).block(); } /** @@ -171,11 +164,12 @@ public CancelMediaProcessingResult cancelMediaProcessing(String callId, CancelMe * * @param callId Call id to to cancel media processing. * @param request Cancel Media Processing request. + * @param context A {@link Context} representing the request context. * @return response for a successful CancelMediaProcessing request. */ @ServiceMethod(returns = ReturnType.SINGLE) - public Response cancelMediaProcessingWithResponse(String callId, CancelMediaProcessingRequest request) { - return callAsyncClient.cancelMediaProcessingWithResponse(callId, request).block(); + public Response cancelMediaProcessingWithResponse(String callId, CancelMediaProcessingRequest request, Context context) { + return callAsyncClient.cancelMediaProcessingWithResponse(callId, request, context).block(); } /** @@ -195,11 +189,12 @@ public Void inviteParticipants(String callId, InviteParticipantsRequest request) * * @param callId Call id. * @param request Invite participant request. + * @param context A {@link Context} representing the request context. * @return response for a successful inviteParticipants request. */ @ServiceMethod(returns = ReturnType.SINGLE) - public Response inviteParticipantsWithResponse(String callId, InviteParticipantsRequest request) { - return callAsyncClient.inviteParticipantsWithResponse(callId, request).block(); + public Response inviteParticipantsWithResponse(String callId, InviteParticipantsRequest request, Context context) { + return callAsyncClient.inviteParticipantsWithResponse(callId, request, context).block(); } /** @@ -219,10 +214,11 @@ public Void removeParticipant(String callId, String participantId) { * * @param callId Call id. * @param participantId Participant id. + * @param context A {@link Context} representing the request context. * @return response for a successful removeParticipant request. */ @ServiceMethod(returns = ReturnType.SINGLE) - public Response removeParticipantWithResponse(String callId, String participantId) { - return callAsyncClient.removeParticipantWithResponse(callId, participantId).block(); + public Response removeParticipantWithResponse(String callId, String participantId, Context context) { + return callAsyncClient.removeParticipantWithResponse(callId, participantId, context).block(); } } diff --git a/sdk/communication/azure-communication-callingserver/src/main/java/com/azure/communication/callingserver/ConversationAsyncClient.java b/sdk/communication/azure-communication-callingserver/src/main/java/com/azure/communication/callingserver/ConversationAsyncClient.java index 629d198c7cb6..185fa86a00cc 100644 --- a/sdk/communication/azure-communication-callingserver/src/main/java/com/azure/communication/callingserver/ConversationAsyncClient.java +++ b/sdk/communication/azure-communication-callingserver/src/main/java/com/azure/communication/callingserver/ConversationAsyncClient.java @@ -15,6 +15,7 @@ import com.azure.core.annotation.ServiceMethod; import com.azure.core.http.rest.Response; import com.azure.core.http.rest.SimpleResponse; +import com.azure.core.util.Context; import com.azure.core.util.logging.ClientLogger; import reactor.core.publisher.Mono; @@ -22,6 +23,7 @@ import java.security.InvalidParameterException; import java.util.Objects; +import static com.azure.core.util.FluxUtil.withContext; import static com.azure.core.util.FluxUtil.monoError; /** @@ -75,21 +77,30 @@ public Mono startRecording(String conversationId, URI */ @ServiceMethod(returns = ReturnType.SINGLE) public Mono> startRecordingWithResponse(String conversationId, - URI recordingStateCallbackUri) { + URI recordingStateCallbackUri) { + return startRecordingWithResponse(conversationId, recordingStateCallbackUri, null); + } + + Mono> startRecordingWithResponse(String conversationId, + URI recordingStateCallbackUri, Context context) { try { Objects.requireNonNull(conversationId, "'conversationId' cannot be null."); Objects.requireNonNull(recordingStateCallbackUri, "'recordingStateCallbackUri' cannot be null."); if (!Boolean.TRUE.equals(recordingStateCallbackUri.isAbsolute())) { throw logger.logExceptionAsError(new InvalidParameterException("'recordingStateCallbackUri' cannot be non absolute Uri")); } - - StartCallRecordingRequestInternal request = createStartCallRecordingRequest(recordingStateCallbackUri); - return this.conversationsClient.startRecordingWithResponseAsync(conversationId, request) - .flatMap((Response response) -> { - StartCallRecordingResult startCallRecordingResult = convertGetCallRecordingStateResponse( - response.getValue()); - return Mono.just(new SimpleResponse<>(response, startCallRecordingResult)); - }); + return withContext(contextValue -> { + if (context != null) { + contextValue = context; + } + StartCallRecordingRequestInternal request = createStartCallRecordingRequest(recordingStateCallbackUri); + return this.conversationsClient.startRecordingWithResponseAsync(conversationId, request) + .flatMap((Response response) -> { + StartCallRecordingResult startCallRecordingResult = convertGetCallRecordingStateResponse( + response.getValue()); + return Mono.just(new SimpleResponse<>(response, startCallRecordingResult)); + }); + }); } catch (RuntimeException ex) { return monoError(logger, ex); } @@ -122,10 +133,19 @@ public Mono stopRecording(String conversationId, String recordingId) { */ @ServiceMethod(returns = ReturnType.SINGLE) public Mono> stopRecordingWithResponse(String conversationId, String recordingId) { + return stopRecordingWithResponse(conversationId, recordingId, null); + } + + Mono> stopRecordingWithResponse(String conversationId, String recordingId, Context context) { try { Objects.requireNonNull(conversationId, "'conversationId' cannot be null."); Objects.requireNonNull(recordingId, "'recordingId' cannot be null."); - return this.conversationsClient.stopRecordingWithResponseAsync(conversationId, recordingId); + return withContext(contextValue -> { + if (context != null) { + contextValue = context; + } + return this.conversationsClient.stopRecordingWithResponseAsync(conversationId, recordingId); + }); } catch (RuntimeException ex) { return monoError(logger, ex); } @@ -158,10 +178,19 @@ public Mono pauseRecording(String conversationId, String recordingId) { */ @ServiceMethod(returns = ReturnType.SINGLE) public Mono> pauseRecordingWithResponse(String conversationId, String recordingId) { + return pauseRecordingWithResponse(conversationId, recordingId, null); + } + + Mono> pauseRecordingWithResponse(String conversationId, String recordingId, Context context) { try { Objects.requireNonNull(conversationId, "'conversationId' cannot be null."); Objects.requireNonNull(recordingId, "'recordingId' cannot be null."); - return this.conversationsClient.pauseRecordingWithResponseAsync(conversationId, recordingId); + return withContext(contextValue -> { + if (context != null) { + contextValue = context; + } + return this.conversationsClient.pauseRecordingWithResponseAsync(conversationId, recordingId); + }); } catch (RuntimeException ex) { return monoError(logger, ex); } @@ -194,10 +223,19 @@ public Mono resumeRecording(String conversationId, String recordingId) { */ @ServiceMethod(returns = ReturnType.SINGLE) public Mono> resumeRecordingWithResponse(String conversationId, String recordingId) { + return resumeRecordingWithResponse(conversationId, recordingId, null); + } + + Mono> resumeRecordingWithResponse(String conversationId, String recordingId, Context context) { try { Objects.requireNonNull(conversationId, "'conversationId' cannot be null."); Objects.requireNonNull(recordingId, "'recordingId' cannot be null."); - return this.conversationsClient.resumeRecordingWithResponseAsync(conversationId, recordingId); + return withContext(contextValue -> { + if (context != null) { + contextValue = context; + } + return this.conversationsClient.resumeRecordingWithResponseAsync(conversationId, recordingId); + }); } catch (RuntimeException ex) { return monoError(logger, ex); } @@ -236,15 +274,25 @@ public Mono getRecordingState(String conversationId @ServiceMethod(returns = ReturnType.SINGLE) public Mono> getRecordingStateWithResponse(String conversationId, String recordingId) { + return getRecordingStateWithResponse(conversationId, recordingId, null); + } + + Mono> getRecordingStateWithResponse(String conversationId, + String recordingId, Context context) { try { Objects.requireNonNull(conversationId, "'conversationId' cannot be null."); Objects.requireNonNull(recordingId, "'recordingId' cannot be null."); - return this.conversationsClient.recordingStateWithResponseAsync(conversationId, recordingId) - .flatMap((Response response) -> { - GetCallRecordingStateResult getRecordingStateResult = convertGetCallRecordingStateResponse( - response.getValue()); - return Mono.just(new SimpleResponse<>(response, getRecordingStateResult)); - }); + return withContext(contextValue -> { + if (context != null) { + contextValue = context; + } + return this.conversationsClient.recordingStateWithResponseAsync(conversationId, recordingId) + .flatMap((Response response) -> { + GetCallRecordingStateResult getRecordingStateResult = convertGetCallRecordingStateResponse( + response.getValue()); + return Mono.just(new SimpleResponse<>(response, getRecordingStateResult)); + }); + }); } catch (RuntimeException ex) { return monoError(logger, ex); } diff --git a/sdk/communication/azure-communication-callingserver/src/main/java/com/azure/communication/callingserver/ConversationClient.java b/sdk/communication/azure-communication-callingserver/src/main/java/com/azure/communication/callingserver/ConversationClient.java index 35a24108cdbf..e527381cf4ef 100644 --- a/sdk/communication/azure-communication-callingserver/src/main/java/com/azure/communication/callingserver/ConversationClient.java +++ b/sdk/communication/azure-communication-callingserver/src/main/java/com/azure/communication/callingserver/ConversationClient.java @@ -9,6 +9,7 @@ import com.azure.core.annotation.ServiceClient; import com.azure.core.annotation.ServiceMethod; import com.azure.core.http.rest.Response; +import com.azure.core.util.Context; import java.net.URI; @@ -40,12 +41,13 @@ public StartCallRecordingResult startRecording(String conversationId, URI record * * @param conversationId The conversation id. * @param recordingStateCallbackUri The uri to send state change callbacks. + * @param context A {@link Context} representing the request context. * @return response for a successful startRecording request. */ @ServiceMethod(returns = ReturnType.SINGLE) public Response startRecordingWithResponse(String conversationId, - URI recordingStateCallbackUri) { - return conversationAsyncClient.startRecordingWithResponse(conversationId, recordingStateCallbackUri).block(); + URI recordingStateCallbackUri, Context context) { + return conversationAsyncClient.startRecordingWithResponse(conversationId, recordingStateCallbackUri, context).block(); } /** @@ -65,11 +67,12 @@ public Void stopRecording(String conversationId, String recordingId) { * * @param conversationId The conversation id. * @param recordingId The recording id to stop. + * @param context A {@link Context} representing the request context. * @return response for a successful stopRecording request. */ @ServiceMethod(returns = ReturnType.SINGLE) - public Response stopRecordingWithResponse(String conversationId, String recordingId) { - return conversationAsyncClient.stopRecordingWithResponse(conversationId, recordingId).block(); + public Response stopRecordingWithResponse(String conversationId, String recordingId, Context context) { + return conversationAsyncClient.stopRecordingWithResponse(conversationId, recordingId, context).block(); } /** @@ -89,11 +92,12 @@ public Void pauseRecording(String conversationId, String recordingId) { * * @param conversationId The conversation id. * @param recordingId The recording id to stop. + * @param context A {@link Context} representing the request context. * @return response for a successful pauseRecording request. */ @ServiceMethod(returns = ReturnType.SINGLE) - public Response pauseRecordingWithResponse(String conversationId, String recordingId) { - return conversationAsyncClient.pauseRecordingWithResponse(conversationId, recordingId).block(); + public Response pauseRecordingWithResponse(String conversationId, String recordingId, Context context) { + return conversationAsyncClient.pauseRecordingWithResponse(conversationId, recordingId, context).block(); } /** @@ -113,11 +117,12 @@ public Void resumeRecording(String conversationId, String recordingId) { * * @param conversationId The conversation id. * @param recordingId The recording id to stop. + * @param context A {@link Context} representing the request context. * @return response for a successful resumeRecording request. */ @ServiceMethod(returns = ReturnType.SINGLE) - public Response resumeRecordingWithResponse(String conversationId, String recordingId) { - return conversationAsyncClient.resumeRecordingWithResponse(conversationId, recordingId).block(); + public Response resumeRecordingWithResponse(String conversationId, String recordingId, Context context) { + return conversationAsyncClient.resumeRecordingWithResponse(conversationId, recordingId, context).block(); } /** @@ -137,11 +142,12 @@ public GetCallRecordingStateResult getRecordingState(String conversationId, Stri * * @param conversationId The conversation id. * @param recordingId The recording id to stop. + * @param context A {@link Context} representing the request context. * @return response for a successful getRecordingState request. */ @ServiceMethod(returns = ReturnType.SINGLE) public Response getRecordingStateWithResponse(String conversationId, - String recordingId) { - return conversationAsyncClient.getRecordingStateWithResponse(conversationId, recordingId).block(); + String recordingId, Context context) { + return conversationAsyncClient.getRecordingStateWithResponse(conversationId, recordingId, context).block(); } } diff --git a/sdk/communication/azure-communication-callingserver/src/test/java/com/azure/communication/callingserver/CallingServerTestBase.java b/sdk/communication/azure-communication-callingserver/src/test/java/com/azure/communication/callingserver/CallingServerTestBase.java new file mode 100644 index 000000000000..0b8f3f6f40a3 --- /dev/null +++ b/sdk/communication/azure-communication-callingserver/src/test/java/com/azure/communication/callingserver/CallingServerTestBase.java @@ -0,0 +1,111 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.azure.communication.callingserver; + +import com.azure.core.credential.AccessToken; +import com.azure.core.credential.TokenCredential; +import com.azure.core.credential.TokenRequestContext; +import com.azure.core.http.HttpClient; +import com.azure.core.test.TestBase; +import com.azure.core.test.TestMode; +import com.azure.core.util.Configuration; +import com.azure.core.util.CoreUtils; +import com.azure.core.util.logging.ClientLogger; +import java.time.OffsetDateTime; +import java.util.Locale; +import java.util.StringJoiner; +import java.util.regex.Matcher; +import java.util.regex.Pattern; +import reactor.core.publisher.Mono; +import com.azure.core.http.HttpPipelineNextPolicy; +import com.azure.core.http.HttpResponse; + +public class CallingServerTestBase extends TestBase { + protected static final TestMode TEST_MODE = initializeTestMode(); + + protected static final String CONNECTION_STRING = Configuration.getGlobalConfiguration() + .get("COMMUNICATION_LIVETEST_STATIC_CONNECTION_STRING", "endpoint=https://REDACTED.communication.azure.com/;accesskey=QWNjZXNzS2V5"); + + private static final String TEST_PACKAGES_ENABLED = Configuration.getGlobalConfiguration() + .get("TEST_PACKAGES_ENABLED", "all"); + + private static final StringJoiner JSON_PROPERTIES_TO_REDACT + = new StringJoiner("\":\"|\"", "\"", "\":\"") + .add("to"); + + private static final Pattern JSON_PROPERTY_VALUE_REDACTION_PATTERN + = Pattern.compile(String.format("(?:%s)(.*?)(?:\",|\"})", JSON_PROPERTIES_TO_REDACT.toString()), + Pattern.CASE_INSENSITIVE); + + protected CallClientBuilder getCallClientBuilder(HttpClient httpClient) { + return null; + } + + protected ConversationClientBuilder getConversationClientBuilder(HttpClient httpClient) { + return null; + } + + protected CallClientBuilder getCallClientWithToken(HttpClient httpClient, TokenCredential tokenCredential) { + return null; + } + + + protected ConversationClientBuilder getConversationClientWithToken(HttpClient httpClient, TokenCredential tokenCredential) { + return null; + } + + protected CallClientBuilder getCallClientUsingConnectionString(HttpClient httpClient) { + return null; + } + + protected ConversationClientBuilder getConversationClientUsingConnectionString(HttpClient httpClient) { + return null; + } + + private static TestMode initializeTestMode() { + ClientLogger logger = new ClientLogger(CallingServerTestBase.class); + String azureTestMode = Configuration.getGlobalConfiguration().get("AZURE_TEST_MODE"); + if (azureTestMode != null) { + System.out.println("azureTestMode: " + azureTestMode); + try { + return TestMode.valueOf(azureTestMode.toUpperCase(Locale.US)); + } catch (IllegalArgumentException var3) { + logger.error("Could not parse '{}' into TestEnum. Using 'Playback' mode.", azureTestMode); + return TestMode.PLAYBACK; + } + } else { + logger.info("Environment variable '{}' has not been set yet. Using 'Playback' mode.", "AZURE_TEST_MODE"); + return TestMode.PLAYBACK; + } + } + + private Mono logHeaders(String testName, HttpPipelineNextPolicy next) { + return next.process() + .flatMap(httpResponse -> { + final HttpResponse bufferedResponse = httpResponse.buffer(); + + // Should sanitize printed reponse url + System.out.println("MS-CV header for " + testName + " request " + + bufferedResponse.getRequest().getUrl() + ": " + bufferedResponse.getHeaderValue("MS-CV")); + return Mono.just(bufferedResponse); + }); + } + + static class FakeCredentials implements TokenCredential { + @Override + public Mono getToken(TokenRequestContext tokenRequestContext) { + return Mono.just(new AccessToken("someFakeToken", OffsetDateTime.MAX)); + } + } + + private String redact(String content, Matcher matcher, String replacement) { + while (matcher.find()) { + String captureGroup = matcher.group(1); + if (!CoreUtils.isNullOrEmpty(captureGroup)) { + content = content.replace(matcher.group(1), replacement); + } + } + return content; + } +}