From b7e0193151f7b153b0e82e2d41187b3b07024629 Mon Sep 17 00:00:00 2001
From: AMIT KUMAR <amit.kumar@tarento.com>
Date: Fri, 20 Aug 2021 11:19:18 +0530
Subject: [PATCH] Issue #SC-2309 feat:Added requestcontext to sms provider
 methods (#916)

* Issue #SC-2309 feat:Added requestcontext to sms provider methods

* Issue #SC-2309 feat:Added requestcontext to sms provider methods

* Issue #SC-2309 feat:Added requestcontext to sms provider methods
---
 .../sms/provider/ISmsProvider.java            |  7 +-
 .../sms/providerimpl/Msg91SmsProvider.java    | 83 ++++++++++---------
 .../providerimpl/NICGatewaySmsProvider.java   | 19 +++--
 .../notification/sms/Message91GetSMSTest.java |  7 +-
 .../notification/sms/Message91Test.java       | 62 +++++++-------
 .../notification/sms/Msg91PostMethodTest.java | 13 +--
 .../sms/NICGatewaySmsProviderTest.java        |  3 +-
 .../user/UserOnboardingNotificationActor.java |  2 +-
 .../notification/NotificationService.java     |  2 +-
 .../src/main/java/org/sunbird/util/Util.java  | 19 ++---
 .../java/org/sunbird/util/otp/OTPUtil.java    |  2 +-
 .../test/java/org/sunbird/util/UtilTest.java  | 30 +++++++
 .../org/sunbird/util/otp/OTPUtilTest.java     |  6 +-
 13 files changed, 145 insertions(+), 110 deletions(-)

diff --git a/core/notification-utils/src/main/java/org/sunbird/notification/sms/provider/ISmsProvider.java b/core/notification-utils/src/main/java/org/sunbird/notification/sms/provider/ISmsProvider.java
index 0d4c6dd1a..f76ff8d1a 100644
--- a/core/notification-utils/src/main/java/org/sunbird/notification/sms/provider/ISmsProvider.java
+++ b/core/notification-utils/src/main/java/org/sunbird/notification/sms/provider/ISmsProvider.java
@@ -3,6 +3,7 @@ package org.sunbird.notification.sms.provider;
 import java.util.List;
 import java.util.Map;
 import org.sunbird.notification.utils.SmsTemplateUtil;
+import org.sunbird.request.RequestContext;
 
 public interface ISmsProvider {
 
@@ -25,7 +26,7 @@ public interface ISmsProvider {
    * @param smsText Sms text
    * @return boolean
    */
-  boolean send(String phoneNumber, String smsText);
+  boolean send(String phoneNumber, String smsText, RequestContext context);
 
   /**
    * This method will send SMS on user provider country code, basically it will override the value
@@ -36,7 +37,7 @@ public interface ISmsProvider {
    * @param smsText
    * @return boolean
    */
-  boolean send(String phoneNumber, String countryCode, String smsText);
+  boolean send(String phoneNumber, String countryCode, String smsText, RequestContext context);
 
   /**
    * This method will send the SMS to list of phone number at the same time. default country code
@@ -46,5 +47,5 @@ public interface ISmsProvider {
    * @param smsText Sms text
    * @return boolean
    */
-  boolean send(List<String> phoneNumber, String smsText);
+  boolean send(List<String> phoneNumber, String smsText, RequestContext context);
 }
diff --git a/core/notification-utils/src/main/java/org/sunbird/notification/sms/providerimpl/Msg91SmsProvider.java b/core/notification-utils/src/main/java/org/sunbird/notification/sms/providerimpl/Msg91SmsProvider.java
index c6dde3616..757702a85 100644
--- a/core/notification-utils/src/main/java/org/sunbird/notification/sms/providerimpl/Msg91SmsProvider.java
+++ b/core/notification-utils/src/main/java/org/sunbird/notification/sms/providerimpl/Msg91SmsProvider.java
@@ -1,11 +1,5 @@
 package org.sunbird.notification.sms.providerimpl;
 
-import java.io.IOException;
-import java.net.URLEncoder;
-import java.nio.charset.StandardCharsets;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
 import org.apache.http.HttpEntity;
 import org.apache.http.StatusLine;
 import org.apache.http.client.methods.CloseableHttpResponse;
@@ -19,6 +13,14 @@ import org.sunbird.notification.sms.Sms;
 import org.sunbird.notification.sms.provider.ISmsProvider;
 import org.sunbird.notification.utils.JsonUtil;
 import org.sunbird.notification.utils.PropertiesCache;
+import org.sunbird.request.RequestContext;
+
+import java.io.IOException;
+import java.net.URLEncoder;
+import java.nio.charset.StandardCharsets;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
 
 public class Msg91SmsProvider implements ISmsProvider {
   private static LoggerUtil logger = new LoggerUtil(Msg91SmsProvider.class);
@@ -59,19 +61,19 @@ public class Msg91SmsProvider implements ISmsProvider {
   }
 
   @Override
-  public boolean send(String phoneNumber, String smsText) {
+  public boolean send(String phoneNumber, String smsText, RequestContext context) {
     if ("POST".equalsIgnoreCase(smsMethodType)) {
-      return sendSmsUsingPost(phoneNumber, smsText);
+      return sendSmsUsingPost(phoneNumber, smsText, context);
     }
-    return sendSmsGetMethod(phoneNumber, smsText);
+    return sendSmsGetMethod(phoneNumber, smsText, context);
   }
 
   @Override
-  public boolean send(String phoneNumber, String countryCode, String smsText) {
+  public boolean send(String phoneNumber, String countryCode, String smsText, RequestContext context) {
     if ("POST".equalsIgnoreCase(smsMethodType)) {
-      return sendSmsUsingPost(phoneNumber, smsText);
+      return sendSmsUsingPost(phoneNumber, smsText, context);
     }
-    return sendSmsGetMethod(phoneNumber, smsText);
+    return sendSmsGetMethod(phoneNumber, smsText, context);
   }
 
   /**
@@ -81,9 +83,9 @@ public class Msg91SmsProvider implements ISmsProvider {
    * @param smsText String
    * @return boolean
    */
-  private boolean sendSmsUsingPost(String mobileNumber, String smsText) {
-    logger.debug("Msg91SmsProvider@Sending " + smsText + "  to mobileNumber " + mobileNumber);
-    logger.debug(
+  private boolean sendSmsUsingPost(String mobileNumber, String smsText, RequestContext context) {
+    logger.debug(context,"Msg91SmsProvider@Sending " + smsText + "  to mobileNumber " + mobileNumber);
+    logger.debug(context,
         "Msg91SmsProvider@SMS Provider parameters \n"
             + "Gateway - "
             + baseUrl
@@ -113,11 +115,11 @@ public class Msg91SmsProvider implements ISmsProvider {
       if (validateSettings(mobileNumber, smsText)) {
         String tempMobileNumber = removePlusFromMobileNumber(mobileNumber);
 
-        logger.debug("Msg91SmsProvider - after removePlusFromMobileNumber " + tempMobileNumber);
+        logger.debug(context, "Msg91SmsProvider - after removePlusFromMobileNumber " + tempMobileNumber);
         // add dlt template id header
         String templateId = getTemplateId(smsText);
         path = baseUrl + postUrl + "?DLT_TE_ID=" + templateId;
-        logger.debug("Msg91SmsProvider -Executing request - " + path);
+        logger.debug(context, "Msg91SmsProvider -Executing request - " + path);
 
         HttpPost httpPost = new HttpPost(path);
 
@@ -126,7 +128,7 @@ public class Msg91SmsProvider implements ISmsProvider {
 
         // add authkey header
         httpPost.setHeader("authkey", authKey);
-        logger.debug("Msg91SmsProvider -request header- " + httpPost.getAllHeaders());
+        logger.debug(context, "Msg91SmsProvider -request header- " + httpPost.getAllHeaders());
 
         List<String> mobileNumbers = new ArrayList<>();
         mobileNumbers.add(tempMobileNumber);
@@ -144,7 +146,7 @@ public class Msg91SmsProvider implements ISmsProvider {
         String providerDetailsString = JsonUtil.toJson(providerDetails);
 
         if (!JsonUtil.isStringNullOREmpty(providerDetailsString)) {
-          logger.debug("Msg91SmsProvider - Body - " + providerDetailsString);
+          logger.debug(context, "Msg91SmsProvider - Body - " + providerDetailsString);
 
           HttpEntity entity =
               new ByteArrayEntity(providerDetailsString.getBytes(StandardCharsets.UTF_8));
@@ -154,7 +156,7 @@ public class Msg91SmsProvider implements ISmsProvider {
           StatusLine sl = response.getStatusLine();
           response.close();
           if (sl.getStatusCode() != 200) {
-            logger.info(
+            logger.info(context,
                 "SMS code for "
                     + tempMobileNumber
                     + " could not be sent: "
@@ -162,19 +164,20 @@ public class Msg91SmsProvider implements ISmsProvider {
                     + " - "
                     + sl.getReasonPhrase());
           }
+          logger.info(context, "Status code for Msg91SmsProvider : "+sl.getStatusCode());
           return sl.getStatusCode() == 200;
         } else {
           return false;
         }
       } else {
-        logger.debug("Msg91SmsProvider - Some mandatory parameters are empty!");
+        logger.debug(context, "Msg91SmsProvider - Some mandatory parameters are empty!");
         return false;
       }
     } catch (IOException e) {
-      logger.error("Error occurred :", e);
+      logger.error(context, "Error occurred :", e);
       return false;
     } catch (Exception e) {
-      logger.info("Msg91SmsProvider - Error in coverting providerDetails to string!");
+      logger.info(context, "Msg91SmsProvider - Error in converting providerDetails to string!");
       return false;
     } finally {
       closeHttpResource(httpClient);
@@ -188,7 +191,7 @@ public class Msg91SmsProvider implements ISmsProvider {
    * @param smsText String
    * @return boolean
    */
-  public boolean sendSmsGetMethod(String mobileNumber, String smsText) {
+  public boolean sendSmsGetMethod(String mobileNumber, String smsText, RequestContext context) {
     CloseableHttpClient httpClient = null;
     try {
       httpClient = HttpClients.createDefault();
@@ -197,9 +200,8 @@ public class Msg91SmsProvider implements ISmsProvider {
 
         String tempMobileNumber = removePlusFromMobileNumber(mobileNumber);
 
-        logger.debug("Msg91SmsProvider - after removePlusFromMobileNumber " + tempMobileNumber);
+        logger.debug(context, "Msg91SmsProvider - after removePlusFromMobileNumber " + tempMobileNumber);
 
-        logger.debug("Inside GET");
         path =
             getCompletePath(
                 baseUrl + getUrl,
@@ -209,7 +211,7 @@ public class Msg91SmsProvider implements ISmsProvider {
                 authKey,
                 URLEncoder.encode(getDoubleEncodedSMS(smsText), "UTF-8"));
 
-        logger.debug("Msg91SmsProvider -Executing request - " + path);
+        logger.debug(context, "Msg91SmsProvider -Executing request - " + path);
 
         HttpGet httpGet = new HttpGet(path);
 
@@ -225,14 +227,15 @@ public class Msg91SmsProvider implements ISmsProvider {
                   + " - "
                   + sl.getReasonPhrase());
         }
+        logger.info(context, "Status code for Msg91SmsProvider : "+sl.getStatusCode());
         return sl.getStatusCode() == 200;
 
       } else {
-        logger.debug("Msg91SmsProvider - Some mandatory parameters are empty!");
+        logger.debug(context, "Msg91SmsProvider - Some mandatory parameters are empty!");
         return false;
       }
     } catch (IOException e) {
-      logger.error("Error occurred : ", e);
+      logger.error(context, "Error occurred : ", e);
       return false;
     } finally {
       closeHttpResource(httpClient);
@@ -325,10 +328,10 @@ public class Msg91SmsProvider implements ISmsProvider {
   }
 
   @Override
-  public boolean send(List<String> phoneNumber, String smsText) {
+  public boolean send(List<String> phoneNumber, String smsText, RequestContext context) {
     List<String> phoneNumberList = null;
-    logger.debug("Msg91SmsProvider@Sending " + smsText + "  to mobileNumber ");
-    logger.debug(
+    logger.debug(context, "Msg91SmsProvider@Sending " + smsText + "  to mobileNumber ");
+    logger.debug(context,
         "Msg91SmsProvider@SMS Provider parameters \n"
             + "Gateway - "
             + baseUrl
@@ -349,12 +352,12 @@ public class Msg91SmsProvider implements ISmsProvider {
             + smsRoute
             + "\n");
     if (JsonUtil.isStringNullOREmpty(smsText)) {
-      logger.debug("can't sent empty msg.");
+      logger.debug(context, "can't sent empty msg.");
       return false;
     }
     phoneNumberList = validatePhoneList(phoneNumber);
     if (phoneNumberList == null || phoneNumberList.isEmpty()) {
-      logger.debug("can't sent msg with empty phone list.");
+      logger.debug(context, "can't sent msg with empty phone list.");
       return false;
     }
     CloseableHttpClient httpClient = null;
@@ -362,11 +365,10 @@ public class Msg91SmsProvider implements ISmsProvider {
       httpClient = HttpClients.createDefault();
 
       String path = null;
-      logger.debug("Inside POST");
       // add dlt template id header
       String templateId = getTemplateId(smsText);
       path = baseUrl + postUrl + "?DLT_TE_ID=" + templateId;
-      logger.debug("Msg91SmsProvider -Executing request - " + path);
+      logger.debug(context, "Msg91SmsProvider -Executing request - " + path);
       HttpPost httpPost = new HttpPost(path);
 
       // add content-type headers
@@ -387,7 +389,7 @@ public class Msg91SmsProvider implements ISmsProvider {
       String providerDetailsString = JsonUtil.toJson(providerDetails);
 
       if (!JsonUtil.isStringNullOREmpty(providerDetailsString)) {
-        logger.debug("Msg91SmsProvider - Body - " + providerDetailsString);
+        logger.debug(context, "Msg91SmsProvider - Body - " + providerDetailsString);
 
         HttpEntity entity =
             new ByteArrayEntity(providerDetailsString.getBytes(StandardCharsets.UTF_8));
@@ -396,7 +398,7 @@ public class Msg91SmsProvider implements ISmsProvider {
         StatusLine sl = response.getStatusLine();
         response.close();
         if (sl.getStatusCode() != 200) {
-          logger.info(
+          logger.info(context,
               "SMS code for "
                   + phoneNumberList
                   + " could not be sent: "
@@ -404,16 +406,17 @@ public class Msg91SmsProvider implements ISmsProvider {
                   + " - "
                   + sl.getReasonPhrase());
         }
+        logger.info(context, "Status code for Msg91SmsProvider : "+sl.getStatusCode());
         return sl.getStatusCode() == 200;
       } else {
         return false;
       }
 
     } catch (IOException e) {
-      logger.error("error in converting providerDetails to String", e);
+      logger.error(context,"error in converting providerDetails to String", e);
       return false;
     } catch (Exception e) {
-      logger.error("Msg91SmsProvider : send : error in converting providerDetails to String", e);
+      logger.error(context, "Msg91SmsProvider : send : error in converting providerDetails to String", e);
       return false;
     } finally {
       closeHttpResource(httpClient);
diff --git a/core/notification-utils/src/main/java/org/sunbird/notification/sms/providerimpl/NICGatewaySmsProvider.java b/core/notification-utils/src/main/java/org/sunbird/notification/sms/providerimpl/NICGatewaySmsProvider.java
index 92c1ebfc7..5ce390d79 100644
--- a/core/notification-utils/src/main/java/org/sunbird/notification/sms/providerimpl/NICGatewaySmsProvider.java
+++ b/core/notification-utils/src/main/java/org/sunbird/notification/sms/providerimpl/NICGatewaySmsProvider.java
@@ -12,6 +12,7 @@ import org.sunbird.logging.LoggerUtil;
 import org.sunbird.notification.sms.provider.ISmsProvider;
 import org.sunbird.notification.utils.JsonUtil;
 import org.sunbird.notification.utils.PropertiesCache;
+import org.sunbird.request.RequestContext;
 
 public class NICGatewaySmsProvider implements ISmsProvider {
   private static LoggerUtil logger = new LoggerUtil(NICGatewaySmsProvider.class);
@@ -28,27 +29,27 @@ public class NICGatewaySmsProvider implements ISmsProvider {
   }
 
   @Override
-  public boolean send(String phoneNumber, String smsText) {
-    return sendSms(phoneNumber, smsText);
+  public boolean send(String phoneNumber, String smsText, RequestContext context) {
+    return sendSms(phoneNumber, smsText, context);
   }
 
   @Override
-  public boolean send(String phoneNumber, String countryCode, String smsText) {
-    return sendSms(phoneNumber, smsText);
+  public boolean send(String phoneNumber, String countryCode, String smsText, RequestContext context) {
+    return sendSms(phoneNumber, smsText, context);
   }
 
   @Override
-  public boolean send(List<String> phoneNumbers, String smsText) {
+  public boolean send(List<String> phoneNumbers, String smsText, RequestContext context) {
     phoneNumbers
         .stream()
         .forEach(
             phone -> {
-              sendSms(phone, smsText);
+              sendSms(phone, smsText, context);
             });
     return true;
   }
 
-  public boolean sendSms(String mobileNumber, String smsText) {
+  public boolean sendSms(String mobileNumber, String smsText, RequestContext context) {
     try {
       String recipient = mobileNumber;
       if (recipient.length() == 10) {
@@ -79,13 +80,13 @@ public class NICGatewaySmsProvider implements ISmsProvider {
         ObjectMapper mapper = new ObjectMapper();
         Map<String, Object> resultMap;
         resultMap = mapper.readValue(response, Map.class);
-        logger.info("NICGatewaySmsProvider:Result:" + resultMap);
+        logger.info(context,"NICGatewaySmsProvider:Result:" + resultMap);
         return true;
       } else {
         return false;
       }
     } catch (Exception ex) {
-      logger.error("Exception occurred while sending sms.", ex);
+      logger.error(context,"Exception occurred while sending sms.", ex);
       return false;
     }
   }
diff --git a/core/notification-utils/src/test/java/org/sunbird/notification/sms/Message91GetSMSTest.java b/core/notification-utils/src/test/java/org/sunbird/notification/sms/Message91GetSMSTest.java
index 235292eb1..175f1907e 100644
--- a/core/notification-utils/src/test/java/org/sunbird/notification/sms/Message91GetSMSTest.java
+++ b/core/notification-utils/src/test/java/org/sunbird/notification/sms/Message91GetSMSTest.java
@@ -4,6 +4,7 @@ import org.junit.Assert;
 import org.junit.Test;
 import org.powermock.core.classloader.annotations.PowerMockIgnore;
 import org.sunbird.notification.sms.providerimpl.Msg91SmsProvider;
+import org.sunbird.request.RequestContext;
 
 @PowerMockIgnore({"javax.management.*", "javax.net.ssl.*", "javax.security.*"})
 public class Message91GetSMSTest extends BaseMessageTest {
@@ -11,21 +12,21 @@ public class Message91GetSMSTest extends BaseMessageTest {
   // @Test
   public void testSendSmsGetMethodSuccess() {
     Msg91SmsProvider megObj = new Msg91SmsProvider();
-    boolean response = megObj.sendSmsGetMethod("4321111111", "say hai!");
+    boolean response = megObj.sendSmsGetMethod("4321111111", "say hai!", new RequestContext());
     Assert.assertTrue(response);
   }
 
   @Test
   public void testSendSmsGetMethodFailureWithoutMessage() {
     Msg91SmsProvider megObj = new Msg91SmsProvider();
-    boolean response = megObj.sendSmsGetMethod("4321111111", "");
+    boolean response = megObj.sendSmsGetMethod("4321111111", "", new RequestContext());
     Assert.assertFalse(response);
   }
 
   @Test
   public void testSendSmsGetMethodFailureWithEmptySpace() {
     Msg91SmsProvider megObj = new Msg91SmsProvider();
-    boolean response = megObj.sendSmsGetMethod("4321111111", "  ");
+    boolean response = megObj.sendSmsGetMethod("4321111111", "  ", new RequestContext());
     Assert.assertFalse(response);
   }
 }
diff --git a/core/notification-utils/src/test/java/org/sunbird/notification/sms/Message91Test.java b/core/notification-utils/src/test/java/org/sunbird/notification/sms/Message91Test.java
index 715203bed..dc983caec 100644
--- a/core/notification-utils/src/test/java/org/sunbird/notification/sms/Message91Test.java
+++ b/core/notification-utils/src/test/java/org/sunbird/notification/sms/Message91Test.java
@@ -1,7 +1,5 @@
 package org.sunbird.notification.sms;
 
-import java.util.ArrayList;
-import java.util.List;
 import org.junit.Assert;
 import org.junit.FixMethodOrder;
 import org.junit.Test;
@@ -14,6 +12,10 @@ import org.powermock.modules.junit4.PowerMockRunner;
 import org.sunbird.notification.sms.provider.ISmsProvider;
 import org.sunbird.notification.sms.providerimpl.Msg91SmsProvider;
 import org.sunbird.notification.utils.SMSFactory;
+import org.sunbird.request.RequestContext;
+
+import java.util.ArrayList;
+import java.util.List;
 
 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
 @RunWith(PowerMockRunner.class)
@@ -48,10 +50,10 @@ public class Message91Test extends BaseMessageTest {
     PowerMockito.mockStatic(SMSFactory.class);
     ISmsProvider msg91SmsProvider = PowerMockito.mock(Msg91SmsProvider.class);
     PowerMockito.when(SMSFactory.getInstance()).thenReturn(msg91SmsProvider);
-    PowerMockito.when(msg91SmsProvider.send(Mockito.any(String.class), Mockito.any(String.class)))
+    PowerMockito.when(msg91SmsProvider.send(Mockito.any(String.class), Mockito.any(String.class), Mockito.any(RequestContext.class)))
         .thenReturn(true);
     ISmsProvider object = SMSFactory.getInstance();
-    boolean response = object.send("9666666666", "test sms");
+    boolean response = object.send("9666666666", "test sms", new RequestContext());
     Assert.assertTrue(response);
   }
 
@@ -60,10 +62,10 @@ public class Message91Test extends BaseMessageTest {
     PowerMockito.mockStatic(SMSFactory.class);
     ISmsProvider msg91SmsProvider = PowerMockito.mock(Msg91SmsProvider.class);
     PowerMockito.when(SMSFactory.getInstance()).thenReturn(msg91SmsProvider);
-    PowerMockito.when(msg91SmsProvider.send(Mockito.any(String.class), Mockito.any(String.class)))
+    PowerMockito.when(msg91SmsProvider.send(Mockito.any(String.class), Mockito.any(String.class),Mockito.any(RequestContext.class)))
         .thenReturn(false);
     ISmsProvider object = SMSFactory.getInstance();
-    boolean response = object.send("(966) 3890-445", "test sms 122");
+    boolean response = object.send("(966) 3890-445", "test sms 122", new RequestContext());
     Assert.assertFalse(response);
   }
 
@@ -72,10 +74,10 @@ public class Message91Test extends BaseMessageTest {
     PowerMockito.mockStatic(SMSFactory.class);
     ISmsProvider msg91SmsProvider = PowerMockito.mock(Msg91SmsProvider.class);
     PowerMockito.when(SMSFactory.getInstance()).thenReturn(msg91SmsProvider);
-    PowerMockito.when(msg91SmsProvider.send(Mockito.any(String.class), Mockito.any(String.class)))
+    PowerMockito.when(msg91SmsProvider.send(Mockito.any(String.class), Mockito.any(String.class),Mockito.any(RequestContext.class)))
         .thenReturn(true);
     ISmsProvider object = SMSFactory.getInstance();
-    boolean response = object.send("919666666666", "test sms 122");
+    boolean response = object.send("919666666666", "test sms 122", new RequestContext());
     Assert.assertTrue(response);
   }
 
@@ -84,10 +86,10 @@ public class Message91Test extends BaseMessageTest {
     PowerMockito.mockStatic(SMSFactory.class);
     ISmsProvider msg91SmsProvider = PowerMockito.mock(Msg91SmsProvider.class);
     PowerMockito.when(SMSFactory.getInstance()).thenReturn(msg91SmsProvider);
-    PowerMockito.when(msg91SmsProvider.send(Mockito.any(String.class), Mockito.any(String.class)))
+    PowerMockito.when(msg91SmsProvider.send(Mockito.any(String.class), Mockito.any(String.class), Mockito.any(RequestContext.class)))
         .thenReturn(true);
     ISmsProvider object = SMSFactory.getInstance();
-    boolean response = object.send("+919666666666", "test sms 122");
+    boolean response = object.send("+919666666666", "test sms 122", new RequestContext());
     Assert.assertTrue(response);
   }
 
@@ -96,10 +98,10 @@ public class Message91Test extends BaseMessageTest {
     PowerMockito.mockStatic(SMSFactory.class);
     ISmsProvider msg91SmsProvider = PowerMockito.mock(Msg91SmsProvider.class);
     PowerMockito.when(SMSFactory.getInstance()).thenReturn(msg91SmsProvider);
-    PowerMockito.when(msg91SmsProvider.send(Mockito.any(String.class), Mockito.any(String.class)))
+    PowerMockito.when(msg91SmsProvider.send(Mockito.any(String.class), Mockito.any(String.class),Mockito.any(RequestContext.class)))
         .thenReturn(false);
     ISmsProvider object = SMSFactory.getInstance();
-    boolean response = object.send("", "test sms 122");
+    boolean response = object.send("", "test sms 122", new RequestContext());
     Assert.assertFalse(response);
   }
 
@@ -108,10 +110,10 @@ public class Message91Test extends BaseMessageTest {
     PowerMockito.mockStatic(SMSFactory.class);
     ISmsProvider msg91SmsProvider = PowerMockito.mock(Msg91SmsProvider.class);
     PowerMockito.when(SMSFactory.getInstance()).thenReturn(msg91SmsProvider);
-    PowerMockito.when(msg91SmsProvider.send(Mockito.any(String.class), Mockito.any(String.class)))
+    PowerMockito.when(msg91SmsProvider.send(Mockito.any(String.class), Mockito.any(String.class),Mockito.any(RequestContext.class)))
         .thenReturn(false);
     ISmsProvider object = SMSFactory.getInstance();
-    boolean response = object.send("9663890445", "");
+    boolean response = object.send("9663890445", "", new RequestContext());
     Assert.assertFalse(response);
   }
 
@@ -120,10 +122,10 @@ public class Message91Test extends BaseMessageTest {
     PowerMockito.mockStatic(SMSFactory.class);
     ISmsProvider msg91SmsProvider = PowerMockito.mock(Msg91SmsProvider.class);
     PowerMockito.when(SMSFactory.getInstance()).thenReturn(msg91SmsProvider);
-    PowerMockito.when(msg91SmsProvider.send(Mockito.any(String.class), Mockito.any(String.class)))
+    PowerMockito.when(msg91SmsProvider.send(Mockito.any(String.class), Mockito.any(String.class),Mockito.any(RequestContext.class)))
         .thenReturn(false);
     ISmsProvider object = SMSFactory.getInstance();
-    boolean response = object.send("", "");
+    boolean response = object.send("", "", new RequestContext());
     Assert.assertFalse(response);
   }
 
@@ -132,10 +134,10 @@ public class Message91Test extends BaseMessageTest {
     PowerMockito.mockStatic(SMSFactory.class);
     ISmsProvider msg91SmsProvider = PowerMockito.mock(Msg91SmsProvider.class);
     PowerMockito.when(SMSFactory.getInstance()).thenReturn(msg91SmsProvider);
-    PowerMockito.when(msg91SmsProvider.send(Mockito.any(String.class), Mockito.any(String.class)))
+    PowerMockito.when(msg91SmsProvider.send(Mockito.any(String.class), Mockito.any(String.class), Mockito.any(RequestContext.class)))
         .thenReturn(false);
     ISmsProvider object = SMSFactory.getInstance();
-    boolean response = object.send("981se12345", "some message");
+    boolean response = object.send("981se12345", "some message", new RequestContext());
     Assert.assertFalse(response);
   }
 
@@ -144,10 +146,10 @@ public class Message91Test extends BaseMessageTest {
     PowerMockito.mockStatic(SMSFactory.class);
     ISmsProvider msg91SmsProvider = PowerMockito.mock(Msg91SmsProvider.class);
     PowerMockito.when(SMSFactory.getInstance()).thenReturn(msg91SmsProvider);
-    PowerMockito.when(msg91SmsProvider.send(Mockito.any(String.class), Mockito.any(String.class)))
+    PowerMockito.when(msg91SmsProvider.send(Mockito.any(String.class), Mockito.any(String.class),Mockito.any(RequestContext.class)))
         .thenReturn(true);
     ISmsProvider object = SMSFactory.getInstance();
-    boolean response = object.send("1111111111", "some message");
+    boolean response = object.send("1111111111", "some message", new RequestContext());
     Assert.assertTrue(response);
   }
 
@@ -158,10 +160,10 @@ public class Message91Test extends BaseMessageTest {
     PowerMockito.when(SMSFactory.getInstance()).thenReturn(msg91SmsProvider);
     PowerMockito.when(
             msg91SmsProvider.send(
-                Mockito.any(String.class), Mockito.any(String.class), Mockito.any(String.class)))
+                Mockito.any(String.class), Mockito.any(String.class), Mockito.any(String.class), Mockito.any(RequestContext.class)))
         .thenReturn(true);
     ISmsProvider object = SMSFactory.getInstance();
-    boolean response = object.send("1234567898", "91", "some message");
+    boolean response = object.send("1234567898", "91", "some message", new RequestContext());
     Assert.assertTrue(response);
   }
 
@@ -172,10 +174,10 @@ public class Message91Test extends BaseMessageTest {
     PowerMockito.when(SMSFactory.getInstance()).thenReturn(msg91SmsProvider);
     PowerMockito.when(
             msg91SmsProvider.send(
-                Mockito.any(String.class), Mockito.any(String.class), Mockito.any(String.class)))
+                Mockito.any(String.class), Mockito.any(String.class), Mockito.any(String.class),Mockito.any(RequestContext.class)))
         .thenReturn(true);
     ISmsProvider object = SMSFactory.getInstance();
-    boolean response = object.send("0000000000", "+91", "some message");
+    boolean response = object.send("0000000000", "+91", "some message", new RequestContext());
     Assert.assertTrue(response);
   }
 
@@ -184,13 +186,13 @@ public class Message91Test extends BaseMessageTest {
     PowerMockito.mockStatic(SMSFactory.class);
     ISmsProvider msg91SmsProvider = PowerMockito.mock(Msg91SmsProvider.class);
     PowerMockito.when(SMSFactory.getInstance()).thenReturn(msg91SmsProvider);
-    PowerMockito.when(msg91SmsProvider.send(Mockito.any(List.class), Mockito.any(String.class)))
+    PowerMockito.when(msg91SmsProvider.send(Mockito.any(List.class), Mockito.any(String.class), Mockito.any(RequestContext.class)))
         .thenReturn(true);
     ISmsProvider object = SMSFactory.getInstance();
     List<String> phones = new ArrayList<>();
     phones.add("1234567898");
     phones.add("1111111111");
-    boolean response = object.send(phones, "some message");
+    boolean response = object.send(phones, "some message", new RequestContext());
     Assert.assertTrue(response);
   }
 
@@ -199,13 +201,13 @@ public class Message91Test extends BaseMessageTest {
     PowerMockito.mockStatic(SMSFactory.class);
     ISmsProvider msg91SmsProvider = PowerMockito.mock(Msg91SmsProvider.class);
     PowerMockito.when(SMSFactory.getInstance()).thenReturn(msg91SmsProvider);
-    PowerMockito.when(msg91SmsProvider.send(Mockito.any(List.class), Mockito.any(String.class)))
+    PowerMockito.when(msg91SmsProvider.send(Mockito.any(List.class), Mockito.any(String.class),Mockito.any(RequestContext.class)))
         .thenReturn(false);
     ISmsProvider object = SMSFactory.getInstance();
     List<String> phones = new ArrayList<>();
     phones.add("12345678");
     phones.add("11111");
-    boolean response = object.send(phones, "some message");
+    boolean response = object.send(phones, "some message", new RequestContext());
     Assert.assertFalse(response);
   }
 
@@ -214,13 +216,13 @@ public class Message91Test extends BaseMessageTest {
     PowerMockito.mockStatic(SMSFactory.class);
     ISmsProvider msg91SmsProvider = PowerMockito.mock(Msg91SmsProvider.class);
     PowerMockito.when(SMSFactory.getInstance()).thenReturn(msg91SmsProvider);
-    PowerMockito.when(msg91SmsProvider.send(Mockito.any(List.class), Mockito.any(String.class)))
+    PowerMockito.when(msg91SmsProvider.send(Mockito.any(List.class), Mockito.any(String.class),Mockito.any(RequestContext.class)))
         .thenReturn(false);
     ISmsProvider object = SMSFactory.getInstance();
     List<String> phones = new ArrayList<>();
     phones.add("12345678");
     phones.add("11111");
-    boolean response = object.send(phones, " ");
+    boolean response = object.send(phones, " ", new RequestContext());
     Assert.assertFalse(response);
   }
 }
diff --git a/core/notification-utils/src/test/java/org/sunbird/notification/sms/Msg91PostMethodTest.java b/core/notification-utils/src/test/java/org/sunbird/notification/sms/Msg91PostMethodTest.java
index 921751fcd..fdc7ebda3 100644
--- a/core/notification-utils/src/test/java/org/sunbird/notification/sms/Msg91PostMethodTest.java
+++ b/core/notification-utils/src/test/java/org/sunbird/notification/sms/Msg91PostMethodTest.java
@@ -27,6 +27,7 @@ import org.sunbird.notification.sms.providerimpl.Msg91SmsProvider;
 import org.sunbird.notification.utils.PropertiesCache;
 import org.sunbird.notification.utils.SMSFactory;
 import org.sunbird.notification.utils.SmsTemplateUtil;
+import org.sunbird.request.RequestContext;
 
 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
 @RunWith(PowerMockRunner.class)
@@ -104,7 +105,7 @@ public class Msg91PostMethodTest {
     Msg91SmsProvider megObj = new Msg91SmsProvider();
     String sms =
         "OTP to reset your password on instance is 456123. This is valid for 30 minutes only.";
-    boolean response = megObj.send("4321111111", sms);
+    boolean response = megObj.send("4321111111", sms, new RequestContext());
     Assert.assertTrue(response);
   }
 
@@ -128,7 +129,7 @@ public class Msg91PostMethodTest {
     Msg91SmsProvider megObj = new Msg91SmsProvider();
     String sms =
         "OTP to verify your phone number on instance is 456123. This is valid for 30 minutes only.";
-    boolean response = megObj.send("4321111111", sms);
+    boolean response = megObj.send("4321111111", sms, new RequestContext());
     Assert.assertFalse(response);
   }
 
@@ -155,7 +156,7 @@ public class Msg91PostMethodTest {
     List<String> phoneList = new ArrayList<>();
     phoneList.add("5464654653");
     phoneList.add("7897951543");
-    boolean response = megObj.send(phoneList, sms);
+    boolean response = megObj.send(phoneList, sms, new RequestContext());
     Assert.assertTrue(response);
   }
 
@@ -182,7 +183,7 @@ public class Msg91PostMethodTest {
     List<String> phoneList = new ArrayList<>();
     phoneList.add("5464654653");
     phoneList.add("7897951543");
-    boolean response = megObj.send(phoneList, sms);
+    boolean response = megObj.send(phoneList, sms, new RequestContext());
     Assert.assertFalse(response);
   }
 
@@ -206,7 +207,7 @@ public class Msg91PostMethodTest {
     Msg91SmsProvider megObj = new Msg91SmsProvider();
     String sms =
         "OTP to verify your phone number on instance is 456123. This is valid for 30 minutes only.";
-    boolean response = megObj.send("4321111111", "+91", sms);
+    boolean response = megObj.send("4321111111", "+91", sms, new RequestContext());
     Assert.assertTrue(response);
   }
 
@@ -230,7 +231,7 @@ public class Msg91PostMethodTest {
     Msg91SmsProvider megObj = new Msg91SmsProvider();
     String sms =
         "OTP to verify your phone number on instance is 456123. This is valid for 30 minutes only.";
-    boolean response = megObj.send("4321111111", "+91", sms);
+    boolean response = megObj.send("4321111111", "+91", sms, new RequestContext());
     Assert.assertFalse(response);
   }
 }
diff --git a/core/notification-utils/src/test/java/org/sunbird/notification/sms/NICGatewaySmsProviderTest.java b/core/notification-utils/src/test/java/org/sunbird/notification/sms/NICGatewaySmsProviderTest.java
index 1abb6a47f..d4ea38671 100644
--- a/core/notification-utils/src/test/java/org/sunbird/notification/sms/NICGatewaySmsProviderTest.java
+++ b/core/notification-utils/src/test/java/org/sunbird/notification/sms/NICGatewaySmsProviderTest.java
@@ -27,6 +27,7 @@ import org.sunbird.notification.sms.providerimpl.NICGatewaySmsProvider;
 import org.sunbird.notification.utils.PropertiesCache;
 import org.sunbird.notification.utils.SMSFactory;
 import org.sunbird.notification.utils.SmsTemplateUtil;
+import org.sunbird.request.RequestContext;
 import org.sunbird.util.ProjectUtil;
 
 @FixMethodOrder(MethodSorters.NAME_ASCENDING)
@@ -96,7 +97,7 @@ public class NICGatewaySmsProviderTest {
     NICGatewaySmsProvider megObj = new NICGatewaySmsProvider();
     String sms =
         "OTP to reset your password on instance is 456123. This is valid for 30 minutes only.";
-    boolean response = megObj.send("4321111111", sms);
+    boolean response = megObj.send("4321111111", sms, new RequestContext());
     Assert.assertFalse(response);
   }
 }
diff --git a/service/src/main/java/org/sunbird/actor/user/UserOnboardingNotificationActor.java b/service/src/main/java/org/sunbird/actor/user/UserOnboardingNotificationActor.java
index 600c00341..b42ee0236 100644
--- a/service/src/main/java/org/sunbird/actor/user/UserOnboardingNotificationActor.java
+++ b/service/src/main/java/org/sunbird/actor/user/UserOnboardingNotificationActor.java
@@ -61,7 +61,7 @@ public class UserOnboardingNotificationActor extends BaseActor {
     }
 
     if (StringUtils.isNotBlank((String) requestMap.get(JsonKey.PHONE))) {
-      Util.sendSMS(requestMap);
+      Util.sendSMS(requestMap, request.getRequestContext());
     }
     SSOManager ssoManager = SSOServiceFactory.getInstance();
     if (StringUtils.isBlank((String) requestMap.get(JsonKey.PASSWORD))) {
diff --git a/service/src/main/java/org/sunbird/service/notification/NotificationService.java b/service/src/main/java/org/sunbird/service/notification/NotificationService.java
index 36a2fd203..5c0924ec7 100644
--- a/service/src/main/java/org/sunbird/service/notification/NotificationService.java
+++ b/service/src/main/java/org/sunbird/service/notification/NotificationService.java
@@ -95,7 +95,7 @@ public class NotificationService {
       context, "NotificationService:sendSMS: Sending sendSMS to = " + phones.size() + " phones");
     try {
       ISmsProvider smsProvider = SMSFactory.getInstance();
-      return smsProvider.send(phones, smsText);
+      return smsProvider.send(phones, smsText, context);
     } catch (Exception e) {
       logger.error(
         context,
diff --git a/service/src/main/java/org/sunbird/util/Util.java b/service/src/main/java/org/sunbird/util/Util.java
index aff03ce98..b21f25b44 100644
--- a/service/src/main/java/org/sunbird/util/Util.java
+++ b/service/src/main/java/org/sunbird/util/Util.java
@@ -774,13 +774,13 @@ public final class Util {
     }
   }
 
-  public static void sendSMS(Map<String, Object> userMap) {
+  public static void sendSMS(Map<String, Object> userMap, RequestContext context) {
     if (StringUtils.isNotBlank((String) userMap.get(JsonKey.PHONE))) {
       String envName = ProjectUtil.getConfigValue(JsonKey.SUNBIRD_INSTALLATION_DISPLAY_NAME);
       setRequiredActionLink(userMap);
       if (StringUtils.isBlank((String) userMap.get(JsonKey.SET_PASSWORD_LINK))
           && StringUtils.isBlank((String) userMap.get(JsonKey.VERIFY_EMAIL_LINK))) {
-        logger.info("Util:sendSMS: SMS not sent as generated link is empty");
+        logger.info(context, "Util:sendSMS: SMS not sent as generated link is empty");
         return;
       }
       Map<String, String> smsTemplate = new HashMap<>();
@@ -791,8 +791,8 @@ public final class Util {
       if (StringUtils.isBlank(sms)) {
         sms = PropertiesCache.getInstance().getProperty(JsonKey.SUNBIRD_DEFAULT_WELCOME_MSG);
       }
-      logger.info("SMS text : " + sms);
-      String countryCode = "";
+      logger.debug(context, "SMS text : " + sms);
+      String countryCode;
       if (StringUtils.isBlank((String) userMap.get(JsonKey.COUNTRY_CODE))) {
         countryCode =
             PropertiesCache.getInstance().getProperty(JsonKey.SUNBIRD_DEFAULT_COUNTRY_CODE);
@@ -800,14 +800,9 @@ public final class Util {
         countryCode = (String) userMap.get(JsonKey.COUNTRY_CODE);
       }
       ISmsProvider smsProvider = SMSFactory.getInstance();
-      logger.info("SMS text : " + sms + " with phone " + (String) userMap.get(JsonKey.PHONE));
-      boolean response = smsProvider.send((String) userMap.get(JsonKey.PHONE), countryCode, sms);
-      logger.info("Response from smsProvider : " + response);
-      if (response) {
-        logger.info("Welcome Message sent successfully to ." + (String) userMap.get(JsonKey.PHONE));
-      } else {
-        logger.info("Welcome Message failed for ." + (String) userMap.get(JsonKey.PHONE));
-      }
+      logger.debug(context, "SMS text : " + sms + " with phone " + userMap.get(JsonKey.PHONE));
+      boolean response = smsProvider.send((String) userMap.get(JsonKey.PHONE), countryCode, sms, context);
+      logger.info(context, "Response from smsProvider : " + response);
     }
   }
 
diff --git a/service/src/main/java/org/sunbird/util/otp/OTPUtil.java b/service/src/main/java/org/sunbird/util/otp/OTPUtil.java
index fd32d008d..ec433a581 100644
--- a/service/src/main/java/org/sunbird/util/otp/OTPUtil.java
+++ b/service/src/main/java/org/sunbird/util/otp/OTPUtil.java
@@ -114,7 +114,7 @@ public final class OTPUtil {
             + " with phone = "
             + otpMap.get(JsonKey.PHONE));
 
-    boolean response = smsProvider.send((String) otpMap.get(JsonKey.PHONE), countryCode, sms);
+    boolean response = smsProvider.send((String) otpMap.get(JsonKey.PHONE), countryCode, sms, context);
 
     logger.info(
         context,
diff --git a/service/src/test/java/org/sunbird/util/UtilTest.java b/service/src/test/java/org/sunbird/util/UtilTest.java
index d51e926b3..a5c99e0fd 100644
--- a/service/src/test/java/org/sunbird/util/UtilTest.java
+++ b/service/src/test/java/org/sunbird/util/UtilTest.java
@@ -24,6 +24,8 @@ import org.sunbird.common.factory.EsClientFactory;
 import org.sunbird.common.inf.ElasticSearchService;
 import org.sunbird.helper.ServiceFactory;
 import org.sunbird.keys.JsonKey;
+import org.sunbird.notification.sms.provider.ISmsProvider;
+import org.sunbird.notification.utils.SMSFactory;
 import org.sunbird.request.RequestContext;
 import org.sunbird.response.Response;
 import org.sunbird.service.organisation.OrgService;
@@ -37,6 +39,8 @@ import scala.concurrent.Promise;
   ElasticSearchRestHighImpl.class,
   ElasticSearchHelper.class,
   CassandraOperationImpl.class,
+  SMSFactory.class,
+  ISmsProvider.class
 })
 @PowerMockIgnore({
   "javax.management.*",
@@ -142,6 +146,32 @@ public class UtilTest {
     Assert.assertNotNull(response);
   }
 
+  @Test
+  public void sendSMSTest() {
+    PowerMockito.mockStatic(SMSFactory.class);
+    ISmsProvider smsProvider = PowerMockito.mock(ISmsProvider.class);
+    when(SMSFactory.getInstance()).thenReturn(smsProvider);
+    when(smsProvider.send(Mockito.anyString(),Mockito.anyString(), Mockito.anyString(), Mockito.any(RequestContext.class))).thenReturn(true);
+    Map<String, Object> map = new HashMap<>();
+    map.put(JsonKey.PHONE, "9999999999");
+    map.put(JsonKey.SET_PASSWORD_LINK,"resetPasswordLink");
+    map.put(JsonKey.VERIFY_EMAIL_LINK,"emailVerifyLink");
+    Util.sendSMS(map, new RequestContext());
+    Assert.assertNotNull(map);
+  }
+
+  @Test
+  public void sendSMSTest2() {
+    PowerMockito.mockStatic(SMSFactory.class);
+    ISmsProvider smsProvider = PowerMockito.mock(ISmsProvider.class);
+    when(SMSFactory.getInstance()).thenReturn(smsProvider);
+    when(smsProvider.send(Mockito.anyString(),Mockito.anyString(), Mockito.anyString(), Mockito.any(RequestContext.class))).thenReturn(true);
+    Map<String, Object> map = new HashMap<>();
+    map.put(JsonKey.PHONE, "9999999999");
+    Util.sendSMS(map, new RequestContext());
+    Assert.assertNotNull(map);
+  }
+
   public static Map<String, Object> getEsResponseMap() {
     Map<String, Object> map = new HashMap<>();
     map.put(JsonKey.IS_TENANT, true);
diff --git a/service/src/test/java/org/sunbird/util/otp/OTPUtilTest.java b/service/src/test/java/org/sunbird/util/otp/OTPUtilTest.java
index 58f01878e..924b25625 100644
--- a/service/src/test/java/org/sunbird/util/otp/OTPUtilTest.java
+++ b/service/src/test/java/org/sunbird/util/otp/OTPUtilTest.java
@@ -58,7 +58,7 @@ public class OTPUtilTest {
     ISmsProvider smsProvider = PowerMockito.mock(ISmsProvider.class);
     PowerMockito.mockStatic(SMSFactory.class);
     when(SMSFactory.getInstance()).thenReturn(smsProvider);
-    when(smsProvider.send(Mockito.anyString(),Mockito.anyString(),Mockito.anyString())).thenReturn(true);
+    when(smsProvider.send(Mockito.anyString(),Mockito.anyString(),Mockito.anyString(), Mockito.any(RequestContext.class))).thenReturn(true);
     Map<String, Object> otpMap = new HashMap<>();
     otpMap.put(JsonKey.PHONE,"9742511111");
     otpMap.put(JsonKey.TEMPLATE_ID,"someTemplateId");
@@ -79,7 +79,7 @@ public class OTPUtilTest {
     ISmsProvider smsProvider = PowerMockito.mock(ISmsProvider.class);
     PowerMockito.mockStatic(SMSFactory.class);
     when(SMSFactory.getInstance()).thenReturn(smsProvider);
-    when(smsProvider.send(Mockito.anyString(),Mockito.anyString(),Mockito.anyString())).thenReturn(true);
+    when(smsProvider.send(Mockito.anyString(),Mockito.anyString(),Mockito.anyString(), Mockito.any(RequestContext.class))).thenReturn(true);
     Map<String, Object> otpMap = new HashMap<>();
     otpMap.put(JsonKey.PHONE,"9742511111");
     otpMap.put(JsonKey.OTP_EXPIRATION_IN_MINUTES,"30");
@@ -99,7 +99,7 @@ public class OTPUtilTest {
     ISmsProvider smsProvider = PowerMockito.mock(ISmsProvider.class);
     PowerMockito.mockStatic(SMSFactory.class);
     when(SMSFactory.getInstance()).thenReturn(smsProvider);
-    when(smsProvider.send(Mockito.anyString(),Mockito.anyString(),Mockito.anyString())).thenReturn(true);
+    when(smsProvider.send(Mockito.anyString(),Mockito.anyString(),Mockito.anyString(), Mockito.any(RequestContext.class))).thenReturn(true);
     Map<String, Object> otpMap = new HashMap<>();
     otpMap.put(JsonKey.PHONE,"9742511111");
     otpMap.put(JsonKey.TEMPLATE_ID,JsonKey.WARD_LOGIN_OTP_TEMPLATE_ID);
-- 
GitLab