diff --git a/apps/epp_proxy/priv/test_backend_app/backend_server.rb b/apps/epp_proxy/priv/test_backend_app/backend_server.rb
index c72e8cc..3aaff6f 100644
--- a/apps/epp_proxy/priv/test_backend_app/backend_server.rb
+++ b/apps/epp_proxy/priv/test_backend_app/backend_server.rb
@@ -5,8 +5,6 @@ class BackendServer < Roda
route do |r|
response['Content-Type'] = 'application/xml'
- random_number = rand(2)
- @success = random_number == 1
r.on "session" do
r.get "hello" do
@@ -14,14 +12,11 @@ class BackendServer < Roda
end
r.post "login" do
- if @success
- render("session/login_successful")
- else
- render("session/login_failed")
- end
+ render("session/login")
end
r.post "logout" do
+ render("session/logout")
end
end
diff --git a/apps/epp_proxy/priv/test_backend_app/views/session/login.erb b/apps/epp_proxy/priv/test_backend_app/views/session/login.erb
new file mode 100644
index 0000000..fb228cb
--- /dev/null
+++ b/apps/epp_proxy/priv/test_backend_app/views/session/login.erb
@@ -0,0 +1,11 @@
+
+
+
+
+ Command completed successfully
+
+
+ ccReg-5886259930
+
+
+
diff --git a/apps/epp_proxy/priv/test_backend_app/views/session/logout.erb b/apps/epp_proxy/priv/test_backend_app/views/session/logout.erb
new file mode 100644
index 0000000..cb5dccc
--- /dev/null
+++ b/apps/epp_proxy/priv/test_backend_app/views/session/logout.erb
@@ -0,0 +1,11 @@
+
+
+
+
+ Command completed successfully; ending session
+
+
+ ccReg-3475281342
+
+
+
diff --git a/apps/epp_proxy/src/epp_util.erl b/apps/epp_proxy/src/epp_util.erl
index 929e8e0..aa6c18a 100644
--- a/apps/epp_proxy/src/epp_util.erl
+++ b/apps/epp_proxy/src/epp_util.erl
@@ -2,7 +2,8 @@
-export([create_map/1, create_session_id/1,
frame_length/1, frame_length_to_receive/1,
- frame_length_to_send/1, readable_ip/1, session_id/1, path_for_file/1]).
+ frame_length_to_send/1, path_for_file/1, readable_ip/1,
+ session_id/1]).
-define(OFFSET, 4).
@@ -70,8 +71,8 @@ readable_ip({FirstOctet, SecondOctet, ThirdOctet,
path_for_file(Filename) ->
case filename:pathtype(Filename) of
- absolute -> Filename;
- relative ->
- CWD = code:priv_dir(epp_proxy),
- filename:join(CWD, Filename)
+ absolute -> Filename;
+ relative ->
+ CWD = code:priv_dir(epp_proxy),
+ filename:join(CWD, Filename)
end.
diff --git a/apps/epp_proxy/test/certs/epp-proxy-test.crt.pem b/apps/epp_proxy/test/certs/epp-proxy-test.crt.pem
deleted file mode 100644
index a45d959..0000000
--- a/apps/epp_proxy/test/certs/epp-proxy-test.crt.pem
+++ /dev/null
@@ -1,36 +0,0 @@
------BEGIN CERTIFICATE-----
-MIIGWzCCBEOgAwIBAgICEAEwDQYJKoZIhvcNAQELBQAwgaoxCzAJBgNVBAYTAkVF
-MREwDwYDVQQIDAhIYXJqdW1hYTEQMA4GA1UEBwwHVGFsbGlubjEjMCEGA1UECgwa
-RWVzdGkgSW50ZXJuZXRpIFNpaHRhc3V0dXMxLzAtBgNVBAMMJk1hY2llaidzIGRl
-dmVsb3BtZW50IGNlcnRpZmljYXRlIChFSVMpMSAwHgYJKoZIhvcNAQkBFhFoZWxs
-b0BpbnRlcm5ldC5lZTAeFw0xOTA1MjMxMjUwMzFaFw0yMDA1MjIxMjUwMzFaMIGp
-MQswCQYDVQQGEwJFRTERMA8GA1UECAwISGFyanVtYWExIzAhBgNVBAoMGkVlc3Rp
-IEludGVybmV0aSBTaWh0YXN1dHVzMSMwIQYDVQQLDBpFUFAgUHJveHkgdGVzdCBj
-ZXJ0aWZpY2F0ZTEXMBUGA1UEAwwORXBwIFByb3h5IFRlc3QxJDAiBgkqhkiG9w0B
-CQEWFWVwcC1wcm94eUBpbnRlcm5ldC5lZTCCAiIwDQYJKoZIhvcNAQEBBQADggIP
-ADCCAgoCggIBAMQalaRFIgknGeQ5iuoBju+cviOksq85azQRIwDaxwwjpFwmRwt2
-smPa/0GMyG3/FBGNpUBtb+0ngVMCw5h4aUeWhs9Y9d1kMqaEgpdLm0hWpUIIqOMO
-wQpHugPQGJiz75Y4tIUbdazODTvEChDNPZ7Ut8jVzsoRFIgPV4abcoqTqD0wNYZb
-TQ0MzOulB2PsxzKrT9MzWkdyju3FYtDxXRGKP3vXC3YhN4EXLqoDzMU51NoYQcPc
-Fk5j+1aQKXfNwJcLEvHGlHce9MIEakl5sJt+u8REmp43uy//DNa7mzACfu4xHAW+
-heuH+xhEZAT40oxFi0Goa2rhMjz7hx5GM8KPFvJ0vlkR74pRnz1/XNqpx5PundYY
-RK0swk+E+z3oFqClsjFiBVZQSPnYdGhid3qDaSqTsVO4G07rzh54SrBm7AsU8CQF
-45OOngr1razw5jKnWH6qzNLFKcZBchOSmW31ZpTqfbol6UhThEM6qZr5Dsk+QZbd
-kVZ5v3YZs72HL5Fxn/Ix5WOL886fSBOOHyg9rkFoypXZxfyZZehbhY3alszqJFbj
-bJ4f+tt2+ObCbkUiN3huP+i+41l+eIBobtsaQhtdzp/44KWR5u4kk2OexO4oZPFN
-futAsemo/sxU8E9KvjS02j2zIXTNyV/8Axp30LhHFQvey8QtNbhM2YClAgMBAAGj
-gYkwgYYwCQYDVR0TBAIwADALBgNVHQ8EBAMCBeAwLAYJYIZIAYb4QgENBB8WHU9w
-ZW5TU0wgR2VuZXJhdGVkIENlcnRpZmljYXRlMB0GA1UdDgQWBBSec3EaCPVAovnz
-u01SwyEoc9Kt6zAfBgNVHSMEGDAWgBRF1wL+I61d2uBQ1467prsu2SYRGTANBgkq
-hkiG9w0BAQsFAAOCAgEAPks4fHoAvzjidw8aJB+nX1pDzbWEbeWOl4xvYizvCN/c
-rWeFp6+BnaUuQK5lXTS1z9m2bf70sSFOFTl6JHbpYdU7xr5Qfn69gfdIqeC2k52g
-R29oYYRQSjMxufHW9IMufJ/FL1PW6EIlahx01WWla/wg6EC3Bygvnz5oCsDaNTwO
-eWKSFVwnE1l6kOoxSparvOdrKpbqvmhUGy8qCRwvLtF2CRQihYSHnnU18oe78REP
-Hkyqfjr/GxHn8senKJcN9AQ4RjxMeH/X1wr7Z+0OTpQh61AMEzzyO9sHy9uvxQoN
-FREhTs53T10Br5Ppx7hp9S6jmiYgL8wtJwJIWFowq87VfuyeqEKhFXqjybeAXIlv
-o4dpUd3woW5rBWhmo6tVs04vNtD6LFktbgkRIV8PPeb1M4QkJ8eD6z7tJNEHVGmK
-S0vlDrdTzERwJlhh52d7a6vPXGG1/S7Mji/xyyDuWClaoJXy5NVr8DnKb1WudAXH
-nspSoh4YApK4oWTKxYWuhs7rshxFu5A2T03RzJbgsAA/9wrZ4BZz4OCtEVUYoIhV
-Qv4f2eOKB8d//vYJWon4R6ukYDZZnYNGplmxl47rzcEam1K88IeaBLN1hirvb9G9
-Xk+wDNgZwJmHtYeJSOZHjiQCl2YJCiVn4gbuDxjrEJvye4s6n8fdn4sv2kX06MU=
------END CERTIFICATE-----
diff --git a/apps/epp_proxy/test/certs/epp-proxy-test.key.pem b/apps/epp_proxy/test/certs/epp-proxy-test.key.pem
deleted file mode 100644
index 0a42e2e..0000000
--- a/apps/epp_proxy/test/certs/epp-proxy-test.key.pem
+++ /dev/null
@@ -1,51 +0,0 @@
------BEGIN RSA PRIVATE KEY-----
-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
------END RSA PRIVATE KEY-----
diff --git a/apps/epp_proxy/test/tls_client_SUITE.erl b/apps/epp_proxy/test/tls_client_SUITE.erl
index f550920..ea06f15 100644
--- a/apps/epp_proxy/test/tls_client_SUITE.erl
+++ b/apps/epp_proxy/test/tls_client_SUITE.erl
@@ -6,12 +6,13 @@
-export([all/0]).
-export([init_per_suite/1, end_per_suite/1]).
-export([frame_size_test_case/1,
- greetings_test_case/1]).
+ greetings_test_case/1,
+ session_test_case/1]).
all() ->
[frame_size_test_case,
- greetings_test_case].
-
+ greetings_test_case,
+ session_test_case].
init_per_suite(Config) ->
application:ensure_all_started(epp_proxy),
@@ -43,6 +44,62 @@ greetings_test_case(Config) ->
match_data(Data, ""),
ok.
+session_test_case(Config) ->
+ Options = proplists:get_value(ssl_options, Config),
+ {ok, Socket} = ssl:connect("localhost", 1443, Options, 2000),
+ _Data = receive_data(Socket),
+ LoginCommand =
+ <<"\n"
+ "\n"
+ "\n"
+ "\n"
+ "test_bestnames\n"
+ "testtest\n"
+ "\n"
+ "1.0\n"
+ "en\n"
+ "\n"
+ "\n"
+ "https://epp.tld.ee/schema/domain-eis-1.0.xsd\n"
+ "https://epp.tld.ee/schema/contact-ee-1.1.xsd\n"
+ "urn:ietf:params:xml:ns:host-1.0\n"
+ "urn:ietf:params:xml:ns:keyrelay-1.0\n"
+ "\n"
+ "\n"
+ "\n"
+ "\n">>,
+ ok = send_data(LoginCommand, Socket),
+ LoginResponse = receive_data(Socket),
+ match_data(LoginResponse, "Command completed successfully"),
+ match_data(LoginResponse, "ccReg-5886259930"),
+ LogoutCommand =
+ <<"\n"
+ "\n"
+ "\n"
+ "\n"
+ "test_bestnames\n"
+ "testtest\n"
+ "\n"
+ "1.0\n"
+ "en\n"
+ "\n"
+ "\n"
+ "https://epp.tld.ee/schema/domain-eis-1.0.xsd\n"
+ "https://epp.tld.ee/schema/contact-ee-1.1.xsd\n"
+ "urn:ietf:params:xml:ns:host-1.0\n"
+ "urn:ietf:params:xml:ns:keyrelay-1.0\n"
+ "\n"
+ "\n"
+ "\n"
+ "\n">>,
+ ok = send_data(LogoutCommand, Socket),
+ LogoutResponse = receive_data(Socket),
+ match_data(LogoutResponse,
+ "Command completed successfully; ending session"),
+ %% After receiving logout, connection should be closed.
+ {error, closed} = receive_data(Socket),
+ ok.
+
%% Helper functions:
length_of_data(Data) ->
EPPEnvelope = binary:part(Data, {0, 4}),
@@ -56,11 +113,14 @@ send_data(Message, Socket) ->
ok = ssl:send(Socket, CompleteMessage).
receive_data(Socket) ->
- {ok, Data} = ssl:recv(Socket, 0, 1200),
- EppEnvelope = binary:part(Data, {0, 4}),
- ReportedLength = binary:decode_unsigned(EppEnvelope, big),
- binary:part(Data, {byte_size(Data), 4 - ReportedLength}).
+ case ssl:recv(Socket, 0, 1200) of
+ {error, Reason} -> {error, Reason};
+ {ok, Data } ->
+ EppEnvelope = binary:part(Data, {0, 4}),
+ ReportedLength = binary:decode_unsigned(EppEnvelope, big),
+ binary:part(Data, {byte_size(Data), 4 - ReportedLength})
+ end.
match_data(Data, Pattern) ->
{ok, MatchPattern} = re:compile(Pattern),
- {match, _Captured} = re:run(Data, Pattern).
+ {match, _Captured} = re:run(Data, MatchPattern).