221V 2 лет назад
Родитель
Сommit
5059588e61
3 измененных файлов с 145 добавлено и 1 удалено
  1. 2 0
      Makefile
  2. 17 1
      README.md
  3. 126 0
      test/limit_reached_SUITE.erl

+ 2 - 0
Makefile

@@ -2,6 +2,8 @@ PROJECT = token_bucket
 PROJECT_DESCRIPTION = token_bucket RPS limitation application
 PROJECT_VERSION = 0.1.0
 
+CT_SUITES = limit_reached
+
 include erlang.mk
 
 run:

+ 17 - 1
README.md

@@ -57,7 +57,23 @@ is_limit_reached(_UserId, _MaxRps) ->
 ```
 ----
 erl 23.3.4.5  
-  
+```
+e@ee:~/git/erlang_test_2023$ . /home/e/.kerl/erlangs/23.3.4.5/activate
 
+e@ee:~/git/erlang_test_2023$ make
+ DEPEND token_bucket.d
+ ERLC   token_bucket.erl
+ APP    token_bucket.app.src
 
+e@ee:~/git/erlang_test_2023$ make run
+erl -pa ebin +pc unicode -args_file vm.args -config sys.config -eval 'application:start(token_bucket)'
+Erlang/OTP 23 [erts-11.2.2.4] [source] [64-bit] [smp:20:20] [ds:20:20:10] [async-threads:5] [hipe]
 
+Eshell V11.2.2.4  (abort with ^G)
+(token_bucket@127.0.0.1)1>
+.. q().
+
+e@ee:~/git/erlang_test_2023$ make ct
+..
+Testing git.erlang_test_2023.limit_reached_SUITE: TEST COMPLETE, 5 ok, 0 failed of 5 test cases
+```

+ 126 - 0
test/limit_reached_SUITE.erl

@@ -0,0 +1,126 @@
+-module(limit_reached_SUITE).
+
+-include_lib("common_test/include/ct.hrl").
+-include_lib("eunit/include/eunit.hrl").
+
+%%-compile([export_all, nowarn_export_all]).
+-export([
+  all/0, groups/0,
+  init_per_suite/1, end_per_suite/1,
+  init_per_group/2, end_per_group/2,
+  init_per_testcase/2, end_per_testcase/2,
+  limit_reached1_test/1,
+  limit_reached2_test/1,
+  limit_reached3_test/1,
+  limit_reached4_test/1,
+  limit_reached5_test/1
+]).
+
+
+all() ->
+  [
+    {group, test_group1}
+    %% перелік груп тестів або ж перелік окремих тестів
+    %%limit_reached1_test,
+    %%limit_reached2_test
+  ].
+
+
+groups() ->
+  [
+    {
+      test_group1,
+      [sequence], %% виконувати тести послідовно
+      [
+        limit_reached1_test,
+        limit_reached2_test,
+        limit_reached3_test,
+        limit_reached4_test,
+        limit_reached5_test
+      ]
+    }
+  ].
+
+
+%% виконується перед запуском переліку тестів
+init_per_suite(Config) ->
+  {ok, _} = application:ensure_all_started(token_bucket),
+  Config.
+
+
+%% виконується після завершення всіх тестів
+end_per_suite(Config) ->
+  Config.
+
+
+%% виконується перед запуском групи тестів
+init_per_group(_GroupName, Config) ->
+  Config.
+
+
+%% виконується після завершення групи тестів
+end_per_group(_GroupName, _Config) ->
+  ok.
+
+
+%% виконується перед запуском кожного тесту
+init_per_testcase(_TestCase, Config) ->
+  Config.
+
+
+%% виконується після кожного тесту
+end_per_testcase(_TestCase, Config) ->
+  Config.
+
+
+
+limit_reached1_test(_Config) ->
+  ?assertEqual(false, token_bucket:is_limit_reached(123) ),
+  ct:pal("limit_reached1_test/1 : [OK]"),
+  ok.
+  %%Config.
+  %%{save_config, Config}.
+
+
+limit_reached2_test(_Config) ->
+  timer:sleep(1001), %% wait 1 sec
+  R = [token_bucket:is_limit_reached(123) || _ <- lists:seq(1,5)],
+  ?assertEqual([false,false,false,true,true], R),
+  ct:pal("limit_reached2_test/1 : [OK]"),
+  ok.
+
+
+limit_reached3_test(_Config) ->
+  timer:sleep(1001), %% wait 1 sec
+  R = [token_bucket:is_limit_reached(123, 4) || _ <- lists:seq(1,5)],
+  ?assertEqual([false,false,false,false,true], R),
+  ct:pal("limit_reached3_test/1 : [OK]"),
+  ok.
+
+
+limit_reached4_test(_Config) ->
+  timer:sleep(1001), %% wait 1 sec
+  R = [token_bucket:is_limit_reached(123, infinity) || _ <- lists:seq(1,5)],
+  ?assertEqual([false,false,false,false,false], R),
+  ct:pal("limit_reached4_test/1 : [OK]"),
+  ok.
+
+
+limit_reached5_test(_Config) ->
+  timer:sleep(1001), %% wait 1 sec
+  R = [token_bucket:is_limit_reached(123) || _ <- lists:seq(1,5)],
+  ?assertEqual([false,false,false,true,true], R),
+  
+  R2 = [token_bucket:is_limit_reached(123, 4) || _ <- lists:seq(1,5)],
+  ?assertEqual([false,true,true,true,true], R2),
+  
+  R3 = [token_bucket:is_limit_reached(777, 4) || _ <- lists:seq(1,5)],
+  ?assertEqual([false,false,false,false,true], R3),
+  
+  timer:sleep(1001), %% wait 1 sec
+  
+  ?assertEqual(false, token_bucket:is_limit_reached(123) ),
+  
+  ct:pal("limit_reached5_test/1 : [OK]"),
+  ok.
+