From 35d2edcbcaad7d713b3d6d1c98c5d03e39768006 Mon Sep 17 00:00:00 2001 From: Rubenlagus Date: Mon, 26 Dec 2016 03:46:46 +0100 Subject: [PATCH] Merge #177 --- Bots.ipr | 326 +++++++----------- README.md | 4 +- TelegramBots.wiki/Changelog.md | 8 +- TelegramBots.wiki/Getting-Started.md | 4 +- TelegramBots.wiki/How-To-Update.md | 5 +- pom.xml | 4 +- telegrambots-meta/pom.xml | 2 +- .../telegrambots/TelegramBotsApi.java | 40 ++- .../telegrambots/generics/BotSession.java | 22 +- .../telegrambots/TestTelegramApi.java | 29 -- .../{ => test}/TelegramBotsHelper.java | 2 +- .../{ => test}/TestDeserialization.java | 2 +- .../telegrambots/test/TestTelegramApi.java | 48 +++ .../{ => test}/apimethods/TestGetUpdates.java | 4 +- .../apimethods/TestSetGameScore.java | 4 +- .../{ => test}/asserts/ApiAssert.java | 2 +- .../{ => test}/base/TestBase.java | 6 +- .../{ => test}/fakes/FakeBotSession.java | 4 +- .../{ => test}/fakes/FakeWebhook.java | 2 +- telegrambots/pom.xml | 16 +- .../updatesreceivers/DefaultBotSession.java | 38 +- .../updatesreceivers/DefaultWebhook.java | 26 +- .../telegrambots/TestDefaultBotSession.java | 18 - .../{ => test}/BotApiMethodHelperFactory.java | 2 +- .../test/Fakes/FakeLongPollingBot.java | 39 +++ .../{ => test}/Fakes/FakeWebhook.java | 4 +- .../test/TestDefaultBotSession.java | 96 ++++++ .../telegrambots/{ => test}/TestRestApi.java | 31 +- 28 files changed, 462 insertions(+), 326 deletions(-) delete mode 100644 telegrambots-meta/src/test/java/org/telegram/telegrambots/TestTelegramApi.java rename telegrambots-meta/src/test/java/org/telegram/telegrambots/{ => test}/TelegramBotsHelper.java (99%) rename telegrambots-meta/src/test/java/org/telegram/telegrambots/{ => test}/TestDeserialization.java (99%) create mode 100644 telegrambots-meta/src/test/java/org/telegram/telegrambots/test/TestTelegramApi.java rename telegrambots-meta/src/test/java/org/telegram/telegrambots/{ => test}/apimethods/TestGetUpdates.java (94%) rename telegrambots-meta/src/test/java/org/telegram/telegrambots/{ => test}/apimethods/TestSetGameScore.java (94%) rename telegrambots-meta/src/test/java/org/telegram/telegrambots/{ => test}/asserts/ApiAssert.java (76%) rename telegrambots-meta/src/test/java/org/telegram/telegrambots/{ => test}/base/TestBase.java (75%) rename telegrambots-meta/src/test/java/org/telegram/telegrambots/{ => test}/fakes/FakeBotSession.java (90%) rename telegrambots-meta/src/test/java/org/telegram/telegrambots/{ => test}/fakes/FakeWebhook.java (96%) delete mode 100644 telegrambots/src/test/java/org/telegram/telegrambots/TestDefaultBotSession.java rename telegrambots/src/test/java/org/telegram/telegrambots/{ => test}/BotApiMethodHelperFactory.java (99%) create mode 100644 telegrambots/src/test/java/org/telegram/telegrambots/test/Fakes/FakeLongPollingBot.java rename telegrambots/src/test/java/org/telegram/telegrambots/{ => test}/Fakes/FakeWebhook.java (91%) create mode 100644 telegrambots/src/test/java/org/telegram/telegrambots/test/TestDefaultBotSession.java rename telegrambots/src/test/java/org/telegram/telegrambots/{ => test}/TestRestApi.java (93%) diff --git a/Bots.ipr b/Bots.ipr index cea2e68f..422dfb6d 100644 --- a/Bots.ipr +++ b/Bots.ipr @@ -17,7 +17,7 @@ - + @@ -29,12 +29,12 @@ - + - + @@ -261,7 +261,7 @@ - + @@ -292,12 +292,18 @@ + + + + + + @@ -311,70 +317,70 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -399,72 +405,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -553,17 +493,6 @@ - - - - - - - - - - - @@ -608,103 +537,103 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -718,147 +647,147 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -894,6 +823,17 @@ + + + + + + + + + + + diff --git a/README.md b/README.md index 1967396f..30ee24ec 100644 --- a/README.md +++ b/README.md @@ -31,8 +31,8 @@ Just import add the library to your project with one of these options: ``` - 2. Using Jitpack from [here](https://jitpack.io/#rubenlagus/TelegramBots/v2.4.4.1) - 3. Download the jar(including all dependencies) from [here](https://github.com/rubenlagus/TelegramBots/releases/tag/v2.4.4.1) + 2. Using Jitpack from [here](https://jitpack.io/#rubenlagus/TelegramBots/v2.4.4.3) + 3. Download the jar(including all dependencies) from [here](https://github.com/rubenlagus/TelegramBots/releases/tag/v2.4.4.3) In order to use Long Polling mode, just create your own bot extending `org.telegram.telegrambots.bots.TelegramLongPollingBot`. diff --git a/TelegramBots.wiki/Changelog.md b/TelegramBots.wiki/Changelog.md index 0e394c05..4974c335 100644 --- a/TelegramBots.wiki/Changelog.md +++ b/TelegramBots.wiki/Changelog.md @@ -23,4 +23,10 @@ 1. New `max_connections` in `setWebhook` method. 2. New `allowed_updates` in `setWebhook` and `getUpdates` 3. New `deleteWebhook` method -4. Added new configs to DefaultBotOptions to handle `max_connections` and `allowed_updates` \ No newline at end of file +4. Added new configs to DefaultBotOptions to handle `max_connections` and `allowed_updates` + +### 2.4.4.3 ### +1. In `BotSession`, renamed `close` to `stop`. `Close` method is maintained for backward compatibility. +2. Support crating webhook with HTTP servers (HTTPS must be managed via external tools) + +**[[How to update to version 2.4.4.3|How-To-Update#2.4.4.3]]** \ No newline at end of file diff --git a/TelegramBots.wiki/Getting-Started.md b/TelegramBots.wiki/Getting-Started.md index 7b74bf20..47d76e47 100644 --- a/TelegramBots.wiki/Getting-Started.md +++ b/TelegramBots.wiki/Getting-Started.md @@ -11,13 +11,13 @@ First you need ot get the library and add it to your project. There are few poss org.telegram telegrambots - 2.4.4.1 + 2.4.4.3 ``` * With **Gradle**: ```groovy - compile group: 'org.telegram', name: 'telegrambots', version: '2.4.4.1' + compile group: 'org.telegram', name: 'telegrambots', version: '2.4.4.3' ``` 2. Don't like **Maven Central Repository**? It can also be taken from [Jitpack](https://jitpack.io/#rubenlagus/TelegramBots). diff --git a/TelegramBots.wiki/How-To-Update.md b/TelegramBots.wiki/How-To-Update.md index 7b51a2a4..399d7ac5 100644 --- a/TelegramBots.wiki/How-To-Update.md +++ b/TelegramBots.wiki/How-To-Update.md @@ -13,4 +13,7 @@ ### To version 2.4.4 ### 1. Replace `ReplyKeyboardHide` by `ReplyKeyboardRemove` and its field `hideKeyboard` by `removeKeyboard` (remember getter and setters) 2. Replace usage of `edit_message` by `disable_edit_message` (see [this post](https://telegram.me/BotNews/22)) -3. Removed deprecated stuff from version 2.4.3 \ No newline at end of file +3. Removed deprecated stuff from version 2.4.3 + +### To version 2.4.4.3 ### +1. Replace `BotSession.close()` by `BotSession.stop()`. \ No newline at end of file diff --git a/pom.xml b/pom.xml index 83c78ffd..5c4788ee 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ org.telegram Bots pom - 2.4.4.1 + 2.4.4.3 telegrambots @@ -24,6 +24,6 @@ true - 2.4.4.1 + 2.4.4.3 \ No newline at end of file diff --git a/telegrambots-meta/pom.xml b/telegrambots-meta/pom.xml index ea2149da..02f72e0f 100644 --- a/telegrambots-meta/pom.xml +++ b/telegrambots-meta/pom.xml @@ -5,7 +5,7 @@ 4.0.0 org.telegram telegrambots-meta - 2.4.4.1 + 2.4.4.3 jar Telegram Bots Meta diff --git a/telegrambots-meta/src/main/java/org/telegram/telegrambots/TelegramBotsApi.java b/telegrambots-meta/src/main/java/org/telegram/telegrambots/TelegramBotsApi.java index 3978c0a3..8a959eb7 100644 --- a/telegrambots-meta/src/main/java/org/telegram/telegrambots/TelegramBotsApi.java +++ b/telegrambots-meta/src/main/java/org/telegram/telegrambots/TelegramBotsApi.java @@ -28,7 +28,29 @@ public class TelegramBotsApi { } /** + * Creates an HTTP server to receive webhook request + * @param externalUrl External base url for the webhook + * @param internalUrl Internal base url for the webhook * + * @implSpec This option requires externally handled HTTPS support (i.e. via proxy) + */ + public TelegramBotsApi(String externalUrl, String internalUrl) throws TelegramApiRequestException { + if (externalUrl == null || externalUrl.isEmpty()) { + throw new TelegramApiRequestException("Parameter externalUrl can not be null or empty"); + } + if (internalUrl == null || internalUrl.isEmpty()) { + throw new TelegramApiRequestException("Parameter internalUrl can not be null or empty"); + } + + this.useWebhook = true; + this.extrenalUrl = fixExternalUrl(externalUrl); + webhook = ApiContext.getInstance(Webhook.class); + webhook.setInternalUrl(internalUrl); + webhook.startServer(); + } + + /** + * Creates an HTTPS server to receive webhook request * @param keyStore KeyStore for the server * @param keyStorePassword Key store password for the server * @param externalUrl External base url for the webhook @@ -41,6 +63,12 @@ public class TelegramBotsApi { if (internalUrl == null || internalUrl.isEmpty()) { throw new TelegramApiRequestException("Parameter internalUrl can not be null or empty"); } + if (keyStore == null || keyStore.isEmpty()) { + throw new TelegramApiRequestException("Parameter keyStore can not be null or empty"); + } + if (keyStorePassword == null || keyStorePassword.isEmpty()) { + throw new TelegramApiRequestException("Parameter keyStorePassword can not be null or empty"); + } this.useWebhook = true; this.extrenalUrl = fixExternalUrl(externalUrl); @@ -51,7 +79,7 @@ public class TelegramBotsApi { } /** - * + * Creates an HTTPS server with self-signed certificate to receive webhook request * @param keyStore KeyStore for the server * @param keyStorePassword Key store password for the server * @param externalUrl External base url for the webhook @@ -65,6 +93,16 @@ public class TelegramBotsApi { if (internalUrl == null || internalUrl.isEmpty()) { throw new TelegramApiRequestException("Parameter internalUrl can not be null or empty"); } + if (keyStore == null || keyStore.isEmpty()) { + throw new TelegramApiRequestException("Parameter keyStore can not be null or empty"); + } + if (keyStorePassword == null || keyStorePassword.isEmpty()) { + throw new TelegramApiRequestException("Parameter keyStorePassword can not be null or empty"); + } + if (pathToCertificate == null || pathToCertificate.isEmpty()) { + throw new TelegramApiRequestException("Parameter pathToCertificate can not be null or empty"); + } + this.useWebhook = true; this.extrenalUrl = fixExternalUrl(externalUrl); this.pathToCertificate = pathToCertificate; diff --git a/telegrambots-meta/src/main/java/org/telegram/telegrambots/generics/BotSession.java b/telegrambots-meta/src/main/java/org/telegram/telegrambots/generics/BotSession.java index c02a3e62..bff5af03 100644 --- a/telegrambots-meta/src/main/java/org/telegram/telegrambots/generics/BotSession.java +++ b/telegrambots-meta/src/main/java/org/telegram/telegrambots/generics/BotSession.java @@ -10,7 +10,27 @@ public interface BotSession { void setOptions(BotOptions options); void setToken(String token); void setCallback(LongPollingBot callback); + + /** + * Starts the bot + */ void start(); - void close(); + + /** + * Stops the bot + */ + void stop(); + + /** + * Check if the bot is running + * @return True if the bot is running, false otherwise + */ boolean isRunning(); + + /** + * @deprecated Use @link{{@link #stop()}} instead + */ + default void close() { + this.stop(); + } } diff --git a/telegrambots-meta/src/test/java/org/telegram/telegrambots/TestTelegramApi.java b/telegrambots-meta/src/test/java/org/telegram/telegrambots/TestTelegramApi.java deleted file mode 100644 index 76426b74..00000000 --- a/telegrambots-meta/src/test/java/org/telegram/telegrambots/TestTelegramApi.java +++ /dev/null @@ -1,29 +0,0 @@ -package org.telegram.telegrambots; - -import org.junit.Assert; -import org.junit.Test; -import org.telegram.telegrambots.base.TestBase; -import org.telegram.telegrambots.exceptions.TelegramApiRequestException; - -/** - * @author Ruben Bermudez - * @version 1.0 - * @brief TODO - * @date 29 of October of 2016 - */ -public class TestTelegramApi extends TestBase { - - @Test - public void TestTelegramApiMustBeInitializableForLongPolling() { - new TelegramBotsApi(); - } - - @Test - public void TestTelegramApiMustBeInitializableForWebhook() { - try { - new TelegramBotsApi("keyStore", "keyStorePassword", "externalUrl", "internalUrl"); - } catch (TelegramApiRequestException e) { - Assert.fail(); - } - } -} diff --git a/telegrambots-meta/src/test/java/org/telegram/telegrambots/TelegramBotsHelper.java b/telegrambots-meta/src/test/java/org/telegram/telegrambots/test/TelegramBotsHelper.java similarity index 99% rename from telegrambots-meta/src/test/java/org/telegram/telegrambots/TelegramBotsHelper.java rename to telegrambots-meta/src/test/java/org/telegram/telegrambots/test/TelegramBotsHelper.java index 07d3e3be..772539a7 100644 --- a/telegrambots-meta/src/test/java/org/telegram/telegrambots/TelegramBotsHelper.java +++ b/telegrambots-meta/src/test/java/org/telegram/telegrambots/test/TelegramBotsHelper.java @@ -1,4 +1,4 @@ -package org.telegram.telegrambots; +package org.telegram.telegrambots.test; /** * @author Ruben Bermudez diff --git a/telegrambots-meta/src/test/java/org/telegram/telegrambots/TestDeserialization.java b/telegrambots-meta/src/test/java/org/telegram/telegrambots/test/TestDeserialization.java similarity index 99% rename from telegrambots-meta/src/test/java/org/telegram/telegrambots/TestDeserialization.java rename to telegrambots-meta/src/test/java/org/telegram/telegrambots/test/TestDeserialization.java index 3c21414c..6ad6504a 100644 --- a/telegrambots-meta/src/test/java/org/telegram/telegrambots/TestDeserialization.java +++ b/telegrambots-meta/src/test/java/org/telegram/telegrambots/test/TestDeserialization.java @@ -1,4 +1,4 @@ -package org.telegram.telegrambots; +package org.telegram.telegrambots.test; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; diff --git a/telegrambots-meta/src/test/java/org/telegram/telegrambots/test/TestTelegramApi.java b/telegrambots-meta/src/test/java/org/telegram/telegrambots/test/TestTelegramApi.java new file mode 100644 index 00000000..444cb91c --- /dev/null +++ b/telegrambots-meta/src/test/java/org/telegram/telegrambots/test/TestTelegramApi.java @@ -0,0 +1,48 @@ +package org.telegram.telegrambots.test; + +import org.junit.Assert; +import org.junit.Test; +import org.telegram.telegrambots.TelegramBotsApi; +import org.telegram.telegrambots.test.base.TestBase; +import org.telegram.telegrambots.exceptions.TelegramApiRequestException; + +/** + * @author Ruben Bermudez + * @version 1.0 + * @brief TODO + * @date 29 of October of 2016 + */ +public class TestTelegramApi extends TestBase { + + @Test + public void TestTelegramApiMustBeInitializableForLongPolling() { + new TelegramBotsApi(); + } + + @Test + public void TestTelegramApiMustBeInitializableForWebhookWithoutSecureSupport() { + try { + new TelegramBotsApi("externalUrl", "internalUrl"); + } catch (TelegramApiRequestException e) { + Assert.fail(); + } + } + + @Test + public void TestTelegramApiMustBeInitializableForWebhook() { + try { + new TelegramBotsApi("keyStore", "keyStorePassword", "externalUrl", "internalUrl"); + } catch (TelegramApiRequestException e) { + Assert.fail(); + } + } + + @Test + public void TestTelegramApiMustBeInitializableForWebhookWithSelfSignedCertificate() { + try { + new TelegramBotsApi("keyStore", "keyStorePassword", "externalUrl", "internalUrl", "selfSignedPath"); + } catch (TelegramApiRequestException e) { + Assert.fail(); + } + } +} diff --git a/telegrambots-meta/src/test/java/org/telegram/telegrambots/apimethods/TestGetUpdates.java b/telegrambots-meta/src/test/java/org/telegram/telegrambots/test/apimethods/TestGetUpdates.java similarity index 94% rename from telegrambots-meta/src/test/java/org/telegram/telegrambots/apimethods/TestGetUpdates.java rename to telegrambots-meta/src/test/java/org/telegram/telegrambots/test/apimethods/TestGetUpdates.java index ec88fc93..f782da98 100644 --- a/telegrambots-meta/src/test/java/org/telegram/telegrambots/apimethods/TestGetUpdates.java +++ b/telegrambots-meta/src/test/java/org/telegram/telegrambots/test/apimethods/TestGetUpdates.java @@ -1,11 +1,11 @@ -package org.telegram.telegrambots.apimethods; +package org.telegram.telegrambots.test.apimethods; import com.fasterxml.jackson.databind.ObjectMapper; import org.junit.Assert; import org.junit.Before; import org.junit.Test; -import org.telegram.telegrambots.TelegramBotsHelper; +import org.telegram.telegrambots.test.TelegramBotsHelper; import org.telegram.telegrambots.api.methods.updates.GetUpdates; import org.telegram.telegrambots.api.objects.Update; import org.telegram.telegrambots.exceptions.TelegramApiRequestException; diff --git a/telegrambots-meta/src/test/java/org/telegram/telegrambots/apimethods/TestSetGameScore.java b/telegrambots-meta/src/test/java/org/telegram/telegrambots/test/apimethods/TestSetGameScore.java similarity index 94% rename from telegrambots-meta/src/test/java/org/telegram/telegrambots/apimethods/TestSetGameScore.java rename to telegrambots-meta/src/test/java/org/telegram/telegrambots/test/apimethods/TestSetGameScore.java index 6b7b64ae..ba0d2bf8 100644 --- a/telegrambots-meta/src/test/java/org/telegram/telegrambots/apimethods/TestSetGameScore.java +++ b/telegrambots-meta/src/test/java/org/telegram/telegrambots/test/apimethods/TestSetGameScore.java @@ -1,11 +1,11 @@ -package org.telegram.telegrambots.apimethods; +package org.telegram.telegrambots.test.apimethods; import com.fasterxml.jackson.databind.ObjectMapper; import org.junit.Assert; import org.junit.Before; import org.junit.Test; -import org.telegram.telegrambots.TelegramBotsHelper; +import org.telegram.telegrambots.test.TelegramBotsHelper; import org.telegram.telegrambots.api.methods.games.SetGameScore; import org.telegram.telegrambots.api.objects.Message; diff --git a/telegrambots-meta/src/test/java/org/telegram/telegrambots/asserts/ApiAssert.java b/telegrambots-meta/src/test/java/org/telegram/telegrambots/test/asserts/ApiAssert.java similarity index 76% rename from telegrambots-meta/src/test/java/org/telegram/telegrambots/asserts/ApiAssert.java rename to telegrambots-meta/src/test/java/org/telegram/telegrambots/test/asserts/ApiAssert.java index e4598f78..ba98633e 100644 --- a/telegrambots-meta/src/test/java/org/telegram/telegrambots/asserts/ApiAssert.java +++ b/telegrambots-meta/src/test/java/org/telegram/telegrambots/test/asserts/ApiAssert.java @@ -1,4 +1,4 @@ -package org.telegram.telegrambots.asserts; +package org.telegram.telegrambots.test.asserts; /** * @author Ruben Bermudez diff --git a/telegrambots-meta/src/test/java/org/telegram/telegrambots/base/TestBase.java b/telegrambots-meta/src/test/java/org/telegram/telegrambots/test/base/TestBase.java similarity index 75% rename from telegrambots-meta/src/test/java/org/telegram/telegrambots/base/TestBase.java rename to telegrambots-meta/src/test/java/org/telegram/telegrambots/test/base/TestBase.java index 2795a709..1b68147b 100644 --- a/telegrambots-meta/src/test/java/org/telegram/telegrambots/base/TestBase.java +++ b/telegrambots-meta/src/test/java/org/telegram/telegrambots/test/base/TestBase.java @@ -1,9 +1,9 @@ -package org.telegram.telegrambots.base; +package org.telegram.telegrambots.test.base; import org.junit.BeforeClass; import org.telegram.telegrambots.ApiContext; -import org.telegram.telegrambots.fakes.FakeBotSession; -import org.telegram.telegrambots.fakes.FakeWebhook; +import org.telegram.telegrambots.test.fakes.FakeBotSession; +import org.telegram.telegrambots.test.fakes.FakeWebhook; import org.telegram.telegrambots.generics.BotSession; import org.telegram.telegrambots.generics.Webhook; diff --git a/telegrambots-meta/src/test/java/org/telegram/telegrambots/fakes/FakeBotSession.java b/telegrambots-meta/src/test/java/org/telegram/telegrambots/test/fakes/FakeBotSession.java similarity index 90% rename from telegrambots-meta/src/test/java/org/telegram/telegrambots/fakes/FakeBotSession.java rename to telegrambots-meta/src/test/java/org/telegram/telegrambots/test/fakes/FakeBotSession.java index 2965b0f4..ec75847a 100644 --- a/telegrambots-meta/src/test/java/org/telegram/telegrambots/fakes/FakeBotSession.java +++ b/telegrambots-meta/src/test/java/org/telegram/telegrambots/test/fakes/FakeBotSession.java @@ -1,4 +1,4 @@ -package org.telegram.telegrambots.fakes; +package org.telegram.telegrambots.test.fakes; import org.telegram.telegrambots.generics.BotOptions; import org.telegram.telegrambots.generics.BotSession; @@ -27,7 +27,7 @@ public class FakeBotSession implements BotSession { } @Override - public void close() { + public void stop() { } diff --git a/telegrambots-meta/src/test/java/org/telegram/telegrambots/fakes/FakeWebhook.java b/telegrambots-meta/src/test/java/org/telegram/telegrambots/test/fakes/FakeWebhook.java similarity index 96% rename from telegrambots-meta/src/test/java/org/telegram/telegrambots/fakes/FakeWebhook.java rename to telegrambots-meta/src/test/java/org/telegram/telegrambots/test/fakes/FakeWebhook.java index b54298d4..a1d279ac 100644 --- a/telegrambots-meta/src/test/java/org/telegram/telegrambots/fakes/FakeWebhook.java +++ b/telegrambots-meta/src/test/java/org/telegram/telegrambots/test/fakes/FakeWebhook.java @@ -1,4 +1,4 @@ -package org.telegram.telegrambots.fakes; +package org.telegram.telegrambots.test.fakes; import org.telegram.telegrambots.exceptions.TelegramApiRequestException; import org.telegram.telegrambots.generics.Webhook; diff --git a/telegrambots/pom.xml b/telegrambots/pom.xml index 868344f1..14af9c8f 100644 --- a/telegrambots/pom.xml +++ b/telegrambots/pom.xml @@ -5,7 +5,7 @@ 4.0.0 org.telegram telegrambots - 2.4.4.1 + 2.4.4.3 jar Telegram Bots @@ -59,13 +59,13 @@ UTF-8 UTF-8 - 2.24 + 2.25 1.19.3 4.5.2 20160810 2.8.5 2.5 - 2.4.4.1 + 2.4.4.3 @@ -135,13 +135,19 @@ org.glassfish.jersey.test-framework jersey-test-framework-core - 2.24 + ${glassfish.version} test org.glassfish.jersey.test-framework.providers jersey-test-framework-provider-grizzly2 - 2.24 + ${glassfish.version} + test + + + org.mockito + mockito-all + 2.0.2-beta test diff --git a/telegrambots/src/main/java/org/telegram/telegrambots/updatesreceivers/DefaultBotSession.java b/telegrambots/src/main/java/org/telegram/telegrambots/updatesreceivers/DefaultBotSession.java index 42e32f49..02d00f04 100644 --- a/telegrambots/src/main/java/org/telegram/telegrambots/updatesreceivers/DefaultBotSession.java +++ b/telegrambots/src/main/java/org/telegram/telegrambots/updatesreceivers/DefaultBotSession.java @@ -39,11 +39,10 @@ import java.util.concurrent.TimeUnit; /** * @author Ruben Bermudez * @version 1.0 - * @brief Thread to request updates with active wait - * @date 20 of June of 2015 + * Thread to request updates with active wait */ public class DefaultBotSession implements BotSession { - protected static final String LOGTAG = "BOTSESSION"; + private static final String LOGTAG = "BOTSESSION"; private volatile boolean running = false; @@ -62,34 +61,40 @@ public class DefaultBotSession implements BotSession { } @Override - public void start() { + public synchronized void start() { if (running) { throw new IllegalStateException("Session already running"); } running = true; - if (readerThread == null || readerThread.isInterrupted()) { - readerThread = new ReaderThread(); - readerThread.setName(callback.getBotUsername() + " Telegram Connection"); - } + + lastReceivedUpdate = 0; + + readerThread = new ReaderThread(); + readerThread.setName(callback.getBotUsername() + " Telegram Connection"); readerThread.start(); - if (handlerThread == null || handlerThread.isInterrupted()) { - handlerThread = new HandlerThread(); - handlerThread.setName(callback.getBotUsername() + " Telegram Executor"); - } + handlerThread = new HandlerThread(); + handlerThread.setName(callback.getBotUsername() + " Telegram Executor"); handlerThread.start(); } @Override - public void close() { + public synchronized void stop() { + if (!running) { + throw new IllegalStateException("Session already stopped"); + } + running = false; + if (readerThread != null) { readerThread.interrupt(); } + if (handlerThread != null) { handlerThread.interrupt(); } + if (callback != null) { callback.onClosing(); } @@ -120,7 +125,7 @@ public class DefaultBotSession implements BotSession { } @Override - public boolean isRunning() { + public synchronized boolean isRunning() { return running; } @@ -130,15 +135,14 @@ public class DefaultBotSession implements BotSession { @Override public synchronized void start() { - super.start(); - httpclient = HttpClientBuilder.create() .setSSLHostnameVerifier(new NoopHostnameVerifier()) .setConnectionTimeToLive(70, TimeUnit.SECONDS) .setMaxConnTotal(100) .build(); - requestConfig = options.getRequestConfig(); + + super.start(); } @Override diff --git a/telegrambots/src/main/java/org/telegram/telegrambots/updatesreceivers/DefaultWebhook.java b/telegrambots/src/main/java/org/telegram/telegrambots/updatesreceivers/DefaultWebhook.java index 0b9a26f4..1e9d5384 100644 --- a/telegrambots/src/main/java/org/telegram/telegrambots/updatesreceivers/DefaultWebhook.java +++ b/telegrambots/src/main/java/org/telegram/telegrambots/updatesreceivers/DefaultWebhook.java @@ -49,20 +49,24 @@ public class DefaultWebhook implements Webhook { } public void startServer() throws TelegramApiRequestException { - SSLContextConfigurator sslContext = new SSLContextConfigurator(); - - // set up security context - sslContext.setKeyStoreFile(keystoreServerFile); // contains server keypair - sslContext.setKeyStorePass(keystoreServerPwd); - ResourceConfig rc = new ResourceConfig(); rc.register(restApi); rc.register(JacksonFeature.class); - final HttpServer grizzlyServer = GrizzlyHttpServerFactory.createHttpServer( - getBaseURI(), - rc, - true, - new SSLEngineConfigurator(sslContext).setClientMode(false).setNeedClientAuth(false)); + + final HttpServer grizzlyServer; + if (keystoreServerFile != null && keystoreServerPwd != null) { + SSLContextConfigurator sslContext = new SSLContextConfigurator(); + + // set up security context + sslContext.setKeyStoreFile(keystoreServerFile); // contains server keypair + sslContext.setKeyStorePass(keystoreServerPwd); + + grizzlyServer = GrizzlyHttpServerFactory.createHttpServer(getBaseURI(), rc, true, + new SSLEngineConfigurator(sslContext).setClientMode(false).setNeedClientAuth(false)); + } else { + grizzlyServer = GrizzlyHttpServerFactory.createHttpServer(getBaseURI(), rc); + } + try { grizzlyServer.start(); } catch (IOException e) { diff --git a/telegrambots/src/test/java/org/telegram/telegrambots/TestDefaultBotSession.java b/telegrambots/src/test/java/org/telegram/telegrambots/TestDefaultBotSession.java deleted file mode 100644 index fbaf53dc..00000000 --- a/telegrambots/src/test/java/org/telegram/telegrambots/TestDefaultBotSession.java +++ /dev/null @@ -1,18 +0,0 @@ -package org.telegram.telegrambots; - -import org.junit.Assert; -import org.junit.Test; -import org.telegram.telegrambots.updatesreceivers.DefaultBotSession; - -/** - * @author Ruben Bermudez - * @version 1.0 - * @brief TODO - * @date 07 of November of 2016 - */ -public class TestDefaultBotSession { - @Test - public void TestDefaultBotSessionIsNotRunninWhenCreated() throws Exception { - Assert.assertFalse(new DefaultBotSession().isRunning()); - } -} diff --git a/telegrambots/src/test/java/org/telegram/telegrambots/BotApiMethodHelperFactory.java b/telegrambots/src/test/java/org/telegram/telegrambots/test/BotApiMethodHelperFactory.java similarity index 99% rename from telegrambots/src/test/java/org/telegram/telegrambots/BotApiMethodHelperFactory.java rename to telegrambots/src/test/java/org/telegram/telegrambots/test/BotApiMethodHelperFactory.java index 696d4ba8..71121580 100644 --- a/telegrambots/src/test/java/org/telegram/telegrambots/BotApiMethodHelperFactory.java +++ b/telegrambots/src/test/java/org/telegram/telegrambots/test/BotApiMethodHelperFactory.java @@ -1,4 +1,4 @@ -package org.telegram.telegrambots; +package org.telegram.telegrambots.test; import org.telegram.telegrambots.api.methods.ActionType; import org.telegram.telegrambots.api.methods.AnswerCallbackQuery; diff --git a/telegrambots/src/test/java/org/telegram/telegrambots/test/Fakes/FakeLongPollingBot.java b/telegrambots/src/test/java/org/telegram/telegrambots/test/Fakes/FakeLongPollingBot.java new file mode 100644 index 00000000..29e55ad0 --- /dev/null +++ b/telegrambots/src/test/java/org/telegram/telegrambots/test/Fakes/FakeLongPollingBot.java @@ -0,0 +1,39 @@ +package org.telegram.telegrambots.test.Fakes; + +import org.telegram.telegrambots.api.objects.Update; +import org.telegram.telegrambots.bots.DefaultBotOptions; +import org.telegram.telegrambots.exceptions.TelegramApiRequestException; +import org.telegram.telegrambots.generics.BotOptions; +import org.telegram.telegrambots.generics.LongPollingBot; + +/** + * @author Ruben Bermudez + * @version 1.0 + */ +public class FakeLongPollingBot implements LongPollingBot +{ + @Override + public void onUpdateReceived(Update update) { + + } + + @Override + public String getBotUsername() { + return ""; + } + + @Override + public String getBotToken() { + return ""; + } + + @Override + public BotOptions getOptions() { + return new DefaultBotOptions(); + } + + @Override + public void clearWebhook() throws TelegramApiRequestException { + + } +} diff --git a/telegrambots/src/test/java/org/telegram/telegrambots/Fakes/FakeWebhook.java b/telegrambots/src/test/java/org/telegram/telegrambots/test/Fakes/FakeWebhook.java similarity index 91% rename from telegrambots/src/test/java/org/telegram/telegrambots/Fakes/FakeWebhook.java rename to telegrambots/src/test/java/org/telegram/telegrambots/test/Fakes/FakeWebhook.java index cade79fc..f5a65b82 100644 --- a/telegrambots/src/test/java/org/telegram/telegrambots/Fakes/FakeWebhook.java +++ b/telegrambots/src/test/java/org/telegram/telegrambots/test/Fakes/FakeWebhook.java @@ -1,4 +1,4 @@ -package org.telegram.telegrambots.Fakes; +package org.telegram.telegrambots.test.Fakes; import org.telegram.telegrambots.api.methods.BotApiMethod; import org.telegram.telegrambots.api.objects.Update; @@ -8,8 +8,6 @@ import org.telegram.telegrambots.generics.WebhookBot; /** * @author Ruben Bermudez * @version 1.0 - * @brief TODO - * @date 01 of November of 2016 */ public class FakeWebhook implements WebhookBot { private BotApiMethod returnValue; diff --git a/telegrambots/src/test/java/org/telegram/telegrambots/test/TestDefaultBotSession.java b/telegrambots/src/test/java/org/telegram/telegrambots/test/TestDefaultBotSession.java new file mode 100644 index 00000000..c37fd5a6 --- /dev/null +++ b/telegrambots/src/test/java/org/telegram/telegrambots/test/TestDefaultBotSession.java @@ -0,0 +1,96 @@ +package org.telegram.telegrambots.test; + +import org.apache.http.HttpResponse; +import org.apache.http.ProtocolVersion; +import org.apache.http.client.HttpClient; +import org.apache.http.client.methods.HttpPost; +import org.apache.http.entity.StringEntity; +import org.apache.http.message.BasicHttpResponse; +import org.apache.http.message.BasicStatusLine; +import org.junit.After; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mockito; +import org.telegram.telegrambots.bots.DefaultBotOptions; +import org.telegram.telegrambots.test.Fakes.FakeLongPollingBot; +import org.telegram.telegrambots.updatesreceivers.DefaultBotSession; + +import java.io.IOException; + +/** + * @author Ruben Bermudez + * @version 1.0 + * @brief Test for DefaultBotSession + */ +public class TestDefaultBotSession { + DefaultBotSession session; + + @Before + public void setUp() throws Exception { + session = getDefaultBotSession(); + } + + @After + public void tearDown() throws Exception { + if (session != null && session.isRunning()) { + session.stop(); + } + } + + @Test + public void TestDefaultBotSessionIsNotRunningWhenCreated() throws Exception { + Assert.assertFalse(session.isRunning()); + } + + @Test + public void TestDefaultBotSessionCanBeStartedAfterCreation() throws Exception { + session = getDefaultBotSession(); + session.start(); + Assert.assertTrue(session.isRunning()); + } + + @Test(expected = IllegalStateException.class) + public void TestDefaultBotSessionCanNotBeStoppedAfterCreation() throws Exception { + session = getDefaultBotSession(); + session.stop(); + } + + @Test(expected = IllegalStateException.class) + public void TestDefaultBotSessionCanNotBeStartedIfAlreadyStarted() throws Exception { + session = getDefaultBotSession(); + session.start(); + session.start(); + } + + @Test + public void TestDefaultBotSessionCanBeStoppedIfStarted() throws Exception { + session = getDefaultBotSession(); + session.start(); + session.stop(); + Assert.assertFalse(session.isRunning()); + } + + @Test(expected = IllegalStateException.class) + public void TestDefaultBotSessionCanNotBeStoppedIfAlreadyStopped() throws Exception { + session = getDefaultBotSession(); + session.start(); + session.stop(); + session.stop(); + } + + private DefaultBotSession getDefaultBotSession() throws IOException { + HttpResponse response = new BasicHttpResponse(new BasicStatusLine( + new ProtocolVersion("HTTP", 1, 1), 200, "")); + response.setStatusCode(200); + response.setEntity(new StringEntity("{}")); + + HttpClient mockHttpClient = Mockito.mock(HttpClient.class); + Mockito.when(mockHttpClient.execute(Mockito.any(HttpPost.class))) + .thenReturn(response); + DefaultBotSession session = new DefaultBotSession(); + session.setCallback(new FakeLongPollingBot()); + session.setOptions(new DefaultBotOptions()); + return session; + } +} diff --git a/telegrambots/src/test/java/org/telegram/telegrambots/TestRestApi.java b/telegrambots/src/test/java/org/telegram/telegrambots/test/TestRestApi.java similarity index 93% rename from telegrambots/src/test/java/org/telegram/telegrambots/TestRestApi.java rename to telegrambots/src/test/java/org/telegram/telegrambots/test/TestRestApi.java index 30d6e81f..5f05b206 100644 --- a/telegrambots/src/test/java/org/telegram/telegrambots/TestRestApi.java +++ b/telegrambots/src/test/java/org/telegram/telegrambots/test/TestRestApi.java @@ -1,48 +1,29 @@ -package org.telegram.telegrambots; +package org.telegram.telegrambots.test; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; - import org.glassfish.jersey.jackson.JacksonFeature; import org.glassfish.jersey.server.ResourceConfig; import org.glassfish.jersey.test.JerseyTest; import org.junit.Before; import org.junit.Test; -import org.telegram.telegrambots.Fakes.FakeWebhook; -import org.telegram.telegrambots.api.methods.AnswerCallbackQuery; -import org.telegram.telegrambots.api.methods.AnswerInlineQuery; -import org.telegram.telegrambots.api.methods.BotApiMethod; -import org.telegram.telegrambots.api.methods.ForwardMessage; -import org.telegram.telegrambots.api.methods.GetFile; -import org.telegram.telegrambots.api.methods.GetMe; -import org.telegram.telegrambots.api.methods.GetUserProfilePhotos; +import org.telegram.telegrambots.api.methods.*; import org.telegram.telegrambots.api.methods.games.GetGameHighScores; import org.telegram.telegrambots.api.methods.games.SetGameScore; -import org.telegram.telegrambots.api.methods.groupadministration.GetChat; -import org.telegram.telegrambots.api.methods.groupadministration.GetChatAdministrators; -import org.telegram.telegrambots.api.methods.groupadministration.GetChatMember; -import org.telegram.telegrambots.api.methods.groupadministration.GetChatMemberCount; -import org.telegram.telegrambots.api.methods.groupadministration.KickChatMember; -import org.telegram.telegrambots.api.methods.groupadministration.LeaveChat; -import org.telegram.telegrambots.api.methods.groupadministration.UnbanChatMember; -import org.telegram.telegrambots.api.methods.send.SendChatAction; -import org.telegram.telegrambots.api.methods.send.SendContact; -import org.telegram.telegrambots.api.methods.send.SendGame; -import org.telegram.telegrambots.api.methods.send.SendLocation; -import org.telegram.telegrambots.api.methods.send.SendMessage; -import org.telegram.telegrambots.api.methods.send.SendVenue; +import org.telegram.telegrambots.api.methods.groupadministration.*; +import org.telegram.telegrambots.api.methods.send.*; import org.telegram.telegrambots.api.methods.updates.GetWebhookInfo; import org.telegram.telegrambots.api.methods.updatingmessages.EditMessageCaption; import org.telegram.telegrambots.api.methods.updatingmessages.EditMessageReplyMarkup; import org.telegram.telegrambots.api.methods.updatingmessages.EditMessageText; import org.telegram.telegrambots.api.objects.Update; +import org.telegram.telegrambots.test.Fakes.FakeWebhook; import org.telegram.telegrambots.updatesreceivers.RestApi; -import java.io.IOException; - import javax.ws.rs.client.Entity; import javax.ws.rs.core.Application; import javax.ws.rs.core.MediaType; +import java.io.IOException; import static org.junit.Assert.assertEquals; import static org.junit.Assert.fail;