Test for SmppSmsSender
This commit is contained in:
parent
89c74cac8d
commit
066f40c63f
@ -1,5 +1,5 @@
|
||||
/**
|
||||
* Copyright © 2016-2021 The Thingsboard Authors
|
||||
* Copyright © 2016-2022 The Thingsboard Authors
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@ -42,9 +42,9 @@ import java.util.Optional;
|
||||
|
||||
@Slf4j
|
||||
public class SmppSmsSender extends AbstractSmsSender {
|
||||
private final SmppSmsProviderConfiguration config;
|
||||
protected SmppSmsProviderConfiguration config;
|
||||
|
||||
private Session smppSession;
|
||||
protected Session smppSession;
|
||||
|
||||
public SmppSmsSender(SmppSmsProviderConfiguration config) {
|
||||
if (config.getBindType() == null) {
|
||||
@ -66,9 +66,12 @@ public class SmppSmsSender extends AbstractSmsSender {
|
||||
}
|
||||
|
||||
this.config = config;
|
||||
initSmppSession();
|
||||
this.smppSession = initSmppSession();
|
||||
}
|
||||
|
||||
private SmppSmsSender() {} // for testing purposes
|
||||
|
||||
|
||||
@Override
|
||||
public int sendSms(String numberTo, String message) throws SmsException {
|
||||
try {
|
||||
@ -93,7 +96,7 @@ public class SmppSmsSender extends AbstractSmsSender {
|
||||
|
||||
SubmitSMResp response = smppSession.submit(request);
|
||||
|
||||
log.info("SMPP submit command status: {}", response.getCommandStatus());
|
||||
log.debug("SMPP submit command status: {}", response.getCommandStatus());
|
||||
} catch (Exception e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
@ -101,13 +104,13 @@ public class SmppSmsSender extends AbstractSmsSender {
|
||||
return countMessageSegments(message);
|
||||
}
|
||||
|
||||
public synchronized void checkSmppSession() {
|
||||
if (!smppSession.isOpened()) {
|
||||
private synchronized void checkSmppSession() {
|
||||
if (smppSession == null || !smppSession.isOpened()) {
|
||||
smppSession = initSmppSession();
|
||||
}
|
||||
}
|
||||
|
||||
private Session initSmppSession() {
|
||||
protected Session initSmppSession() {
|
||||
try {
|
||||
Connection connection = new TCPIPConnection(config.getHost(), config.getPort());
|
||||
Session session = new Session(connection);
|
||||
@ -159,7 +162,7 @@ public class SmppSmsSender extends AbstractSmsSender {
|
||||
|
||||
return session;
|
||||
} catch (Exception e) {
|
||||
throw new IllegalArgumentException("Failed to establish SMPP session: " + ExceptionUtils.getRootCauseMessage(e));
|
||||
throw new IllegalArgumentException("Failed to establish SMPP session: " + ExceptionUtils.getRootCauseMessage(e), e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -0,0 +1,121 @@
|
||||
/**
|
||||
* Copyright © 2016-2022 The Thingsboard Authors
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.thingsboard.server.service.sms.smpp;
|
||||
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.assertj.core.api.Assertions;
|
||||
import org.junit.Before;
|
||||
import org.junit.Ignore;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.junit.MockitoJUnitRunner;
|
||||
import org.smpp.Session;
|
||||
import org.smpp.pdu.SubmitSMResp;
|
||||
import org.thingsboard.server.common.data.sms.config.SmppSmsProviderConfiguration;
|
||||
|
||||
import java.lang.reflect.Constructor;
|
||||
import java.net.UnknownHostException;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThatThrownBy;
|
||||
import static org.junit.Assert.fail;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.argThat;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.spy;
|
||||
import static org.mockito.Mockito.times;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
@RunWith(MockitoJUnitRunner.class)
|
||||
public class SmppSmsSenderTest {
|
||||
|
||||
SmppSmsSender smppSmsSender;
|
||||
SmppSmsProviderConfiguration smppConfig;
|
||||
Session smppSession;
|
||||
|
||||
@Before
|
||||
public void beforeEach() throws Exception {
|
||||
Constructor<SmppSmsSender> constructor = SmppSmsSender.class.getDeclaredConstructor();
|
||||
constructor.setAccessible(true);
|
||||
smppSmsSender = spy(constructor.newInstance());
|
||||
|
||||
smppSession = mock(Session.class);
|
||||
smppSmsSender.smppSession = smppSession;
|
||||
|
||||
smppConfig = new SmppSmsProviderConfiguration();
|
||||
smppSmsSender.config = smppConfig;
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSendSms() throws Exception {
|
||||
when(smppSession.isOpened()).thenReturn(true);
|
||||
when(smppSession.submit(any())).thenReturn(new SubmitSMResp());
|
||||
setDefaultSmppConfig();
|
||||
|
||||
String number = "123545";
|
||||
String message = "message";
|
||||
smppSmsSender.sendSms(number, message);
|
||||
|
||||
verify(smppSmsSender, never()).initSmppSession();
|
||||
verify(smppSession).submit(argThat(submitRequest -> {
|
||||
try {
|
||||
return submitRequest.getShortMessage().equals(message) &&
|
||||
submitRequest.getDestAddr().getAddress().equals(number) &&
|
||||
submitRequest.getServiceType().equals(smppConfig.getServiceType()) &&
|
||||
(StringUtils.isEmpty(smppConfig.getSourceAddress()) ? submitRequest.getSourceAddr().getAddress().equals("")
|
||||
: submitRequest.getSourceAddr().getAddress().equals(smppConfig.getSourceAddress()) &&
|
||||
submitRequest.getSourceAddr().getTon() == smppConfig.getSourceTon() &&
|
||||
submitRequest.getSourceAddr().getNpi() == smppConfig.getSourceNpi()) &&
|
||||
submitRequest.getDestAddr().getTon() == smppConfig.getDestinationTon() &&
|
||||
submitRequest.getDestAddr().getNpi() == smppConfig.getDestinationNpi() &&
|
||||
submitRequest.getDataCoding() == smppConfig.getCodingScheme() &&
|
||||
submitRequest.getReplaceIfPresentFlag() == 0 &&
|
||||
submitRequest.getEsmClass() == 0 &&
|
||||
submitRequest.getProtocolId() == 0 &&
|
||||
submitRequest.getPriorityFlag() == 0 &&
|
||||
submitRequest.getRegisteredDelivery() == 0 &&
|
||||
submitRequest.getSmDefaultMsgId() == 0;
|
||||
} catch (Exception e) {
|
||||
fail(e.getMessage());
|
||||
return false;
|
||||
}
|
||||
}));
|
||||
}
|
||||
|
||||
private void setDefaultSmppConfig() {
|
||||
smppConfig.setProtocolVersion("3.3");
|
||||
smppConfig.setHost("smpphost");
|
||||
smppConfig.setPort(5687);
|
||||
smppConfig.setSystemId("213131");
|
||||
smppConfig.setPassword("35125q");
|
||||
|
||||
smppConfig.setSystemType("");
|
||||
smppConfig.setBindType(SmppSmsProviderConfiguration.SmppBindType.TX);
|
||||
smppConfig.setServiceType("");
|
||||
|
||||
smppConfig.setSourceAddress("");
|
||||
smppConfig.setSourceTon((byte) 5);
|
||||
smppConfig.setSourceNpi((byte) 0);
|
||||
|
||||
smppConfig.setDestinationTon((byte) 5);
|
||||
smppConfig.setDestinationNpi((byte) 0);
|
||||
|
||||
smppConfig.setAddressRange("");
|
||||
smppConfig.setCodingScheme((byte) 0);
|
||||
}
|
||||
|
||||
}
|
||||
@ -0,0 +1 @@
|
||||
mock-maker-inline
|
||||
@ -1,5 +1,5 @@
|
||||
/**
|
||||
* Copyright © 2016-2021 The Thingsboard Authors
|
||||
* Copyright © 2016-2022 The Thingsboard Authors
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
|
||||
@ -1,3 +1,20 @@
|
||||
<!--
|
||||
|
||||
Copyright © 2016-2022 The Thingsboard Authors
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
|
||||
-->
|
||||
<form [formGroup]="smppSmsProviderConfigurationFormGroup" style="padding-bottom: 16px;">
|
||||
<div fxLayout="row wrap" fxLayoutGap="6px">
|
||||
<mat-form-field fxFlex.lt-sm="100" fxFlex.gt-sm="15" class="mat-block">
|
||||
|
||||
@ -1,3 +1,19 @@
|
||||
///
|
||||
/// Copyright © 2016-2022 The Thingsboard Authors
|
||||
///
|
||||
/// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
/// you may not use this file except in compliance with the License.
|
||||
/// You may obtain a copy of the License at
|
||||
///
|
||||
/// http://www.apache.org/licenses/LICENSE-2.0
|
||||
///
|
||||
/// Unless required by applicable law or agreed to in writing, software
|
||||
/// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
/// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
/// See the License for the specific language governing permissions and
|
||||
/// limitations under the License.
|
||||
///
|
||||
|
||||
import { Component, forwardRef, Input, OnInit } from '@angular/core';
|
||||
import { ControlValueAccessor, FormBuilder, FormGroup, NG_VALUE_ACCESSOR, Validators } from '@angular/forms';
|
||||
import {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user