module STOMPTest {

	import from STOMP_Types all;

	type component EmptyCT {

	}


//*******************************************************************************************
//Templates
//Rev:    R1B

template STOMPFrame t_message:=
{

  command:=MESSAGE,
  headers:={ {header_name:="foo", header_value:="Hello"}, {header_name:="foo", header_value:="World"}},
  payload:=omit 


}


template STOMPFrame t_send:=
{

  command:=SEND,
  headers:={ {header_name:="destination", header_value:="/queue/a"}, {header_name:="receipt", header_value:="message-12345"}},
  payload:=char2oct("hello queue a") 


}


template STOMPFrame t_connect:=
{

  command:=CONNECT,
  headers:={ {header_name:="accept-version", header_value:="1.2"}, {header_name:="host", header_value:="stomp.github.org"}},
  payload:=omit


}


template STOMPFrame t_connected:=
{

  command:=CONNECTED,
  headers:={ {header_name:="version", header_value:="1.2"}},
  payload:=omit


}


template STOMPFrame t_error:=
{

  command:=ERROR,
  headers:={ {header_name:="version", header_value:="1.2,2.1"},{header_name:="content-type", header_value:="text/plain"} },
  payload:=char2oct("Supported protocol versions are 1.2 2.1")


}


template STOMPFrame t_subscribe:=
{

  command:=SUBSCRIBE,
  headers:={ {header_name:="id", header_value:="0"},{header_name:="destination", header_value:="/queue/foo"},{header_name:="ack", header_value:="client"} },
  payload:=omit


}


template STOMPFrame t_unsubscribe:=
{

  command:=UNSUBSCRIBE,
  headers:={ {header_name:="id", header_value:="0"} },
  payload:=omit


}


template STOMPFrame t_begin:=
{

  command:=BEGIN,
  headers:={ {header_name:="transaction", header_value:="tx1"} },
  payload:=omit


}

template STOMPFrame t_ack:=
{

  command:=ACK,
  headers:={{header_name:="id", header_value:="0"}, {header_name:="transaction", header_value:="tx1"} },
  payload:=omit


}


template STOMPFrame t_nack:=
{

  command:=NACK,
  headers:={{header_name:="id", header_value:="0"}, {header_name:="transaction", header_value:="tx1"} },
  payload:=omit


}

template STOMPFrame t_commit:=
{

  command:=COMMIT,
  headers:={ {header_name:="transaction", header_value:="tx1"} },
  payload:=omit


}


template STOMPFrame t_abort:=
{

  command:=ABORT,
  headers:={ {header_name:="transaction", header_value:="tx1"} },
  payload:=omit


}

template STOMPFrame t_disconnect:=
{

  command:=DISCONNECT,
  headers:={ {header_name:="receipt", header_value:="77"} },
  payload:=omit


}


template STOMPFrame t_receipt:=
{

  command:=RECEIPT,
  headers:={ {header_name:="receipt-id", header_value:="77"} },
  payload:=omit


}


template STOMPFrame t_message1:=
{

  command:=MESSAGE,
  headers:={ {header_name:="subscription", header_value:="0"}, {header_name:="message-id", header_value:="007"},{header_name:="destination", header_value:="/queue/a"}, {header_name:="content-type", header_value:="text/plain"}},
  payload:=char2oct("hello queue a")


}



template STOMPFrame t_error1:=
{

  command:=ERROR,
  headers:={ {header_name:="receipt-id", header_value:="message@12345"},{header_name:="content-type", header_value:="text/plain"}, /*{header_name:="content-length", header_value:="171"},*/{header_name:="message", header_value:="malformed frame received"} },
  payload:=char2oct("The message:
  -----
  MESSAGE
  destined:/queue/a
  receipt:message@12345

  Hello queue a!
  -----
  Did not contain a destination header, which is REQUIRED
  for message propagation.")


}

	testcase tc_encdec() runs on EmptyCT {

 	var octetstring v_oct
  	var STOMPFrame v_stomp
 	var integer v_ret

v_ret:=f_STOMP_enc(valueof(t_message), v_oct)
v_ret:=f_STOMP_dec(v_oct,v_stomp )
log(v_stomp)

  v_ret:=f_STOMP_enc(valueof(t_send), v_oct)
v_ret:=f_STOMP_dec(v_oct,v_stomp )
log(v_stomp)
  v_ret:=f_STOMP_enc(valueof(t_connect), v_oct)
v_ret:=f_STOMP_dec(v_oct,v_stomp )
log(v_stomp)
  v_ret:=f_STOMP_enc(valueof(t_connected), v_oct)
v_ret:=f_STOMP_dec(v_oct,v_stomp )
log(v_stomp)

  v_ret:=f_STOMP_enc(valueof(t_error), v_oct)
v_ret:=f_STOMP_dec(v_oct,v_stomp )
log(v_stomp)
  v_ret:=f_STOMP_enc(valueof(t_subscribe), v_oct)
v_ret:=f_STOMP_dec(v_oct,v_stomp )
log(v_stomp)

  v_ret:=f_STOMP_enc(valueof(t_unsubscribe), v_oct)
v_ret:=f_STOMP_dec(v_oct,v_stomp )
log(v_stomp)
  v_ret:=f_STOMP_enc(valueof(t_begin), v_oct)
v_ret:=f_STOMP_dec(v_oct,v_stomp )
log(v_stomp)
  v_ret:=f_STOMP_enc(valueof(t_ack), v_oct)
v_ret:=f_STOMP_dec(v_oct,v_stomp )
log(v_stomp)  
v_ret:=f_STOMP_enc(valueof(t_nack), v_oct)
v_ret:=f_STOMP_dec(v_oct,v_stomp )
log(v_stomp)

  v_ret:=f_STOMP_enc(valueof(t_commit), v_oct)
v_ret:=f_STOMP_dec(v_oct,v_stomp )
log(v_stomp) 

 v_ret:=f_STOMP_enc(valueof(t_abort), v_oct)
v_ret:=f_STOMP_dec(v_oct,v_stomp )
log(v_stomp)

  v_ret:=f_STOMP_enc(valueof(t_disconnect), v_oct)

v_ret:=f_STOMP_dec(v_oct,v_stomp )
log(v_stomp)
  v_ret:=f_STOMP_enc(valueof(t_receipt), v_oct)
v_ret:=f_STOMP_dec(v_oct,v_stomp )
log(v_stomp)
  v_ret:=f_STOMP_enc(valueof(t_message1), v_oct)
v_ret:=f_STOMP_dec(v_oct,v_stomp )
log(v_stomp)
  v_ret:=f_STOMP_enc(valueof(t_error1), v_oct)

log(v_oct)
log(char2oct("The message:
  -----
  MESSAGE
  destined:/queue/a
  receipt:message@12345

  Hello queue a!
  -----
  Did not contain a destination header, which is REQUIRED
  for message propagation."))
 
v_ret:=f_STOMP_dec(v_oct,v_stomp )
log(v_stomp)
  v_oct:=char2oct("MESSAGE\nsubscription:0\nmessage-id:007\r\ndestination:/queue/a\ncontent-type:text/plain\n\r\nhello queue a")

  log(f_STOMP_dec(v_oct, v_stomp))

log(v_stomp)


}




	testcase tc_test() runs on EmptyCT {
		var STOMPFrame frame1, result;
		var octetstring os;
		var integer res;

		

		/////////////////////////////////////////////////////////////
		
		frame1 := {
			command := SEND,
			headers := {
				{ header_name := "a ", header_value := "b"}
			},
			payload := omit
		}

		res := f_STOMP_enc(frame1, os);
		res := f_STOMP_dec(os, result);
		if (not match(result, frame1)) {
			setverdict(fail, match(result, frame1));
		}

		/////////////////////////////////////////////////////////////
		
		frame1 := {
			command := SUBSCRIBE,
			headers := {
				{ header_name := "a", header_value := "b"}
			},
			payload := omit
		}

		res := f_STOMP_enc(frame1, os);
		res := f_STOMP_dec(os, result);
		if (not match(result, frame1)) {
			setverdict(fail, match(result, frame1));
		}

		/////////////////////////////////////////////////////////////
		
		frame1 := {
			command := UNSUBSCRIBE,
			headers := {
				{ header_name := "a", header_value := "b"}
			},
			payload := omit
		}

		res := f_STOMP_enc(frame1, os);
		res := f_STOMP_dec(os, result);
		if (not match(result, frame1)) {
			setverdict(fail, match(result, frame1));
		}

		/////////////////////////////////////////////////////////////
		
		frame1 := {
			command := BEGIN,
			headers := {
				{ header_name := "a", header_value := "b"}
			},
			payload := omit
		}

		res := f_STOMP_enc(frame1, os);
		res := f_STOMP_dec(os, result);
		if (not match(result, frame1)) {
			setverdict(fail, match(result, frame1));
		}

		/////////////////////////////////////////////////////////////
		
		frame1 := {
			command := COMMIT,
			headers := {
				{ header_name := "a", header_value := "b"}
			},
			payload := omit
		}

		res := f_STOMP_enc(frame1, os);
		res := f_STOMP_dec(os, result);
		if (not match(result, frame1)) {
			setverdict(fail, match(result, frame1));
		}

		/////////////////////////////////////////////////////////////
		
		frame1 := {
			command := ABORT,
			headers := {
				{ header_name := "a", header_value := "b"}
			},
			payload := omit
		}

		res := f_STOMP_enc(frame1, os);
		res := f_STOMP_dec(os, result);
		if (not match(result, frame1)) {
			setverdict(fail, match(result, frame1));
		}

		/////////////////////////////////////////////////////////////
		
		frame1 := {
			command := ACK,
			headers := {
				{ header_name := "a", header_value := "b"}
			},
			payload := omit
		}

		res := f_STOMP_enc(frame1, os);
		res := f_STOMP_dec(os, result);
		if (not match(result, frame1)) {
			setverdict(fail, match(result, frame1));
		}

		/////////////////////////////////////////////////////////////
		
		frame1 := {
			command := NACK,
			headers := {
				{ header_name := "a", header_value := "b"}
			},
			payload := omit
		}

		res := f_STOMP_enc(frame1, os);
		res := f_STOMP_dec(os, result);
		if (not match(result, frame1)) {
			setverdict(fail, match(result, frame1));
		}

		/////////////////////////////////////////////////////////////
		
		frame1 := {
			command := DISCONNECT,
			headers := {
				{ header_name := "a", header_value := "b"}
			},
			payload := omit
		}

		res := f_STOMP_enc(frame1, os);
		res := f_STOMP_dec(os, result);
		if (not match(result, frame1)) {
			setverdict(fail, match(result, frame1));
		}

		/////////////////////////////////////////////////////////////
		
		frame1 := {
			command := CONNECTED,
			headers := {
				{ header_name := "a", header_value := "b"}
			},
			payload := omit
		}

		res := f_STOMP_enc(frame1, os);
		res := f_STOMP_dec(os, result);
		if (not match(result, frame1)) {
			setverdict(fail, match(result, frame1));
		}

		/////////////////////////////////////////////////////////////
		
		frame1 := {
			command := CONNECT,
			headers := {
				{ header_name := "a", header_value := "b"}
			},
			payload := omit
		}

		res := f_STOMP_enc(frame1, os);
		res := f_STOMP_dec(os, result);
		if (not match(result, frame1)) {
			setverdict(fail, match(result, frame1));
		}

		/////////////////////////////////////////////////////////////
		
		frame1 := {
			command := STOMP,
			headers := {
				{ header_name := "a", header_value := "b"}
			},
			payload := omit
		}

		res := f_STOMP_enc(frame1, os);
		res := f_STOMP_dec(os, result);
		if (not match(result, frame1)) {
			setverdict(fail, match(result, frame1));
		}

		/////////////////////////////////////////////////////////////
		
		frame1 := {
			command := MESSAGE,
			headers := {
				{ header_name := "a", header_value := "b"}
			},
			payload := omit
		}

		res := f_STOMP_enc(frame1, os);
		res := f_STOMP_dec(os, result);
		if (not match(result, frame1)) {
			setverdict(fail, match(result, frame1));
		}

		/////////////////////////////////////////////////////////////
		
		frame1 := {
			command := RECEIPT,
			headers := {
				{ header_name := "a", header_value := "b"}
			},
			payload := omit
		}

		res := f_STOMP_enc(frame1, os);
		res := f_STOMP_dec(os, result);
		if (not match(result, frame1)) {
			setverdict(fail, match(result, frame1));
		}

		/////////////////////////////////////////////////////////////
		
		frame1 := {
			command := ERROR,
			headers := {
				{ header_name := "a", header_value := "b"}
			},
			payload := omit
		}

		res := f_STOMP_enc(frame1, os);
		res := f_STOMP_dec(os, result);
		if (not match(result, frame1)) {
			setverdict(fail, match(result, frame1));
		}


		/////////////////////////////////////////////////////////////
		
		frame1 := {
			command := SEND,
			headers := {
				{ header_name := "abc", header_value := "def"},
				{ header_name := "ñ\n\r\\:ñ\t", header_value := "ñ\n\r\\:ñ\t"},
				{ header_name := "A, Á, B, C, Cs, D, Dz, Dzs, E, É, F, G, Gy, H, I, Í, J, K, L, Ly, M, N, Ny, O, Ó, Ö, Ő, P, R, S, Sz, T, Ty, U, Ú, Ü, Ű, V, Z, Zs", header_value := "A, Á, B, C, Cs, D, Dz, Dzs, E, É, F, G, Gy, H, I, Í, J, K, L, Ly, M, N, Ny, O, Ó, Ö, Ő, P, R, S, Sz, T, Ty, U, Ú, Ü, Ű, V, Z, Zs"}
			},
			payload := omit
		}

		res := f_STOMP_enc(frame1, os);
		res := f_STOMP_dec(os, result);
		if (not match(result, frame1)) {
			setverdict(fail, match(result, frame1));
		}

		/////////////////////////////////////////////////////////////
		
		frame1 := {
			command := SEND,
			headers := {
				{ header_name := "abc", header_value := "def"},
				{ header_name := "content-length", header_value := "4"}
			},
			payload := 'AAAA00AA'O
		}

		res := f_STOMP_enc(frame1, os);
		res := f_STOMP_dec(os, result);
		if (not match(result, frame1)) {
			setverdict(fail, match(result, frame1));
		}

		/////////////////////////////////////////////////////////////
		
		frame1 := {
			command := SEND,
			headers := {
				{ header_name := "abc", header_value := "def"},
				{ header_name := "content-length", header_value := "4"},
				{ header_name := "content-length", header_value := "8"}
			},
			payload := 'AAAA00AA'O
		}

		res := f_STOMP_enc(frame1, os);
		res := f_STOMP_dec(os, result);
		if (not match(result, frame1)) {
			setverdict(fail, match(result, frame1));
		}

		/////////////////////////////////////////////////////////////
		
		frame1 := {
			command := SEND,
			headers := {
				{ header_name := "", header_value := ""}
			},
			payload := 'AAAAAAAAAA'O
		}

		var STOMPFrame frame6 := {
			command := SEND,
			headers := {
				{ header_name := "", header_value := ""},
				{ header_name := "content-length", header_value := "5" }
			},
			payload := 'AAAAAAAAAA'O
		}

		res := f_STOMP_enc(frame1, os);
		res := f_STOMP_dec(os, result);
		if (not match(result, frame6)) {
			setverdict(fail, match(result, frame6));
		}

		/////////////////////////////////////////////////////////////
		
		frame1 := {
			command := SEND,
			headers := {
				{ header_name := "", header_value := ""}
			},
			payload := omit
		}

		res := f_STOMP_enc(frame1, os);
		res := f_STOMP_dec(os, result);
		if (not match(result, frame1)) {
			setverdict(fail, match(result, frame1));
		}

		/////////////////////////////////////////////////////////////
		
		frame1 := {
			command := SEND,
			headers := {
				{ header_name := "", header_value := ""}
			},
			payload := omit
		}

		res := f_STOMP_enc(frame1, os);
		res := f_STOMP_dec(os, result);
		if (not match(result, frame1)) {
			setverdict(fail, match(result, frame1));
		}

		/////////////////////////////////////////////////////////////
		
		frame1 := {
			command := SEND,
			headers := {
				{ header_name := "", header_value := ""}
			},
			payload := omit
		}

		res := f_STOMP_enc(frame1, os);
		res := f_STOMP_dec(os, result);
		if (not match(result, frame1)) {
			setverdict(fail, match(result, frame1));
		}

		/////////////////////////////////////////////////////////////
		
		frame1 := {
			command := SEND,
			headers := {
			},
			payload := omit
		}

		res := f_STOMP_enc(frame1, os);
		res := f_STOMP_dec(os, result);
		if (not match(result, frame1)) {
			setverdict(fail, match(result, frame1));
		}

		/////////////////////////////////////////////////////////////
		
		var STOMPFrame frame2 := {
			headers := {
				{ header_name := "", header_value := ""}
			},
			payload := omit
		}

		var boolean errors := false;
		@try {
			res := f_STOMP_enc(frame2, os);
		} @catch(e) {
			setverdict(pass);
			errors := true;
		}
		if (errors == false) {
			setverdict(fail, "No error");
		}


		/////////////////////////////////////////////////////////////
		
		var STOMPFrame frame3 := {
			command := SEND,
			payload := omit
		}

		errors := false;
		@try {
			res := f_STOMP_enc(frame3, os);
		} @catch(e) {
			setverdict(pass);
			errors := true;
		}
		if (errors == false) {
			setverdict(fail, "No error");
		}


		/////////////////////////////////////////////////////////////
		
		var STOMPFrame frame4 := {
			command := SEND,
			headers := {
				
			}
		}

		errors := false;
		@try {
			res := f_STOMP_enc(frame4, os);
		} @catch(e) {
			setverdict(pass);
			errors := true;
		}
		if (errors == false) {
			setverdict(fail, "No error");
		}


		/////////////////////////////////////////////////////////////
		
		os := '53AA454E440A613A620A0AAAAAAAAA00'O;
		errors := false;
		@try {
			res := f_STOMP_dec(os, result);
		} @catch(e) {
			setverdict(pass);
			errors := true;
		}
		if (errors == false) {
			setverdict(fail, "No error");
		}

		/////////////////////////////////////////////////////////////
		
		frame1 := {
			command := SEND,
			headers := {
				{ header_name := "a", header_value := "b"}
			},
			payload := 'AAAAAAAA'O
		}
		os := '53454E440A613A620A0AAAAAAAAA000A'O;
		errors := false;
		res := f_STOMP_dec(os, result);
		if (not match(result, frame1)) {
			setverdict(fail, match(result, frame1));
		}

		/////////////////////////////////////////////////////////////
		
		frame1 := {
			command := SEND,
			headers := {
				{ header_name := "a", header_value := "b"}
			},
			payload := 'AAAAAAAA'O
		}
		os := '53454E440A613A620A0AAAAAAAAA000D0A'O;
		errors := false;
		res := f_STOMP_dec(os, result);
		if (not match(result, frame1)) {
			setverdict(fail, match(result, frame1));
		}

		/////////////////////////////////////////////////////////////
		
		frame1 := {
			command := SEND,
			headers := {
				{ header_name := "a", header_value := "b"}
			},
			payload := 'AAAAAAAA'O
		}
		os := '53454E440A613A620A0AAAAAAAAA000D0A0A0A0D0A0D0A'O;
		errors := false;
		res := f_STOMP_dec(os, result);
		if (not match(result, frame1)) {
			setverdict(fail, match(result, frame1));
		}

		/////////////////////////////////////////////////////////////
		
		os := '53454E440A613A620A0AAAAAAAAA00AA'O;
		errors := false;
		@try {
			res := f_STOMP_dec(os, result);
		} @catch(e) {
			setverdict(pass);
			errors := true;
		}
		if (errors == false) {
			setverdict(fail, "No error");
		}

		/////////////////////////////////////////////////////////////
		
		os := '53454E440A613A620A0AAAAAAAAA000D0A0A0A0D0A0D0A11'O;
		errors := false;
		@try {
			res := f_STOMP_dec(os, result);
		} @catch(e) {
			setverdict(pass);
			errors := true;
		}
		if (errors == false) {
			setverdict(fail, "No error");
		}


		/////////////////////////////////////////////////////////////
		
		os := '53454E440A613A620A0AAAAAAAAA000D0A0A0A0D0A0D150A'O;
		errors := false;
		@try {
			res := f_STOMP_dec(os, result);
		} @catch(e) {
			setverdict(pass);
			errors := true;
		}
		if (errors == false) {
			setverdict(fail, "No error");
		}

		/////////////////////////////////////////////////////////////
		
		os := '53454E440A613A620A0AAAAAAAAA000D0A0A0A0D0A0D0A0D'O;
		errors := false;
		@try {
			res := f_STOMP_dec(os, result);
		} @catch(e) {
			setverdict(pass);
			errors := true;
		}
		if (errors == false) {
			setverdict(fail, "No error");
		}

		/////////////////////////////////////////////////////////////
		
		os := '53454E440A613A625C740A0AAAAAAAAA00'O;
		errors := false;
		@try {
			res := f_STOMP_dec(os, result);
		} @catch(e) {
			setverdict(pass);
			errors := true;
		}
		if (errors == false) {
			setverdict(fail, "No error");
		}

		/////////////////////////////////////////////////////////////
		
		frame2 := {
			command := CONNECT,
			headers := {
				{ header_name := "a\\\ra", header_value := "a\\\ra" }
			},
			payload := 'AAAAAAAA'O
		}

		frame6 := {
			command := CONNECT,
			headers := {
				{ header_name := "a\\\ra", header_value := "a\\\ra" },
				{ header_name := "content-length", header_value := "4" }
			},
			payload := 'AAAAAAAA'O
		}

		res := f_STOMP_enc(frame2, os);
		res := f_STOMP_dec(os, result);
		if (not match(result, frame6)) {
			setverdict(fail, match(result, frame6));
		}

		/////////////////////////////////////////////////////////////
		
		frame2 := {
			command := CONNECTED,
			headers := {
				{ header_name := "a\\\ra", header_value := "a\\\ra" }
			},
			payload := 'AAAAAAAA'O
		}

		frame6 := {
			command := CONNECTED,
			headers := {
				{ header_name := "a\\\ra", header_value := "a\\\ra" },
				{ header_name := "content-length", header_value := "4" }
			},
			payload := 'AAAAAAAA'O
		}

		res := f_STOMP_enc(frame2, os);
		res := f_STOMP_dec(os, result);
		if (not match(result, frame6)) {
			setverdict(fail, match(result, frame6));
		}

		/////////////////////////////////////////////////////////////

		frame1 := {
			command := SEND,
			headers := {
				{ header_name := "abc", header_value := "def"},
				{ header_name := "content-length", header_value := "5"}
			},
			payload := 'AAAA00AA'O
		}
		errors := false;
		res := f_STOMP_enc(frame1, os);
		@try {
			res := f_STOMP_dec(os, result);
		} @catch(e) {
			setverdict(pass);
			errors := true;
		}
		if (errors == false) {
			setverdict(fail, "No error");
		}
		
		/////////////////////////////////////////////////////////////

		os := '53454E440A613A620A0AAAAAAAAA00'O;
		res := f_STOMP_dec(os, result);
		frame6 := {
			command := SEND,
			headers := {
				{ header_name := "a", header_value := "b"}
			},
			payload := 'AAAAAAAA'O
		}

		if (not match(result, frame6)) {
			setverdict(fail, match(result, frame6));
		}
		

		/////////////////////////////////////////////////////////////

		frame1 := {
			command := SEND,
			headers := {
				{ header_name := "abc", header_value := "def"},
				{ header_name := "content-length", header_value := "5"}
			},
			payload := 'AAAA00AA'O
		}
		res := f_STOMP_enc(frame1, os);
		var integer len := f_GetSTOMPmsgLength(os);
		if (len != 36) {
			setverdict(fail, match(len, 36));
		}

		/////////////////////////////////////////////////////////////

		
		os := '53454E440A6162633A6465660A636F6E74656E742D6C656E6774683A350A0AAAAA00AA000A'O;
		len := f_GetSTOMPmsgLength(os);
		if (len != 37) {
			setverdict(fail, match(len, 37));
		}

		/////////////////////////////////////////////////////////////


		os := '53454E440A6162633A6465660A636F6E74656E742D6C656E6774683A350A0AAAAA00AA000D0A'O;
		len := f_GetSTOMPmsgLength(os);
		if (len != 38) {
			setverdict(fail, match(len, 38));
		}

		/////////////////////////////////////////////////////////////


		os := '53454E440A6162633A6465660A636F6E74656E742D6C656E6774683A350A0AAAAA00AA000D0A0A'O;
		len := f_GetSTOMPmsgLength(os);
		if (len != 39) {
			setverdict(fail, match(len, 39));
		}

		/////////////////////////////////////////////////////////////


		os := '53454E440A6162633A6465660A636F6E74656E742D6C656E6774683A350D0A0AAAAA00AA000D0A0A'O;
		len := f_GetSTOMPmsgLength(os);
		if (len != 40) {
			setverdict(fail, match(len, 40));
		}

		/////////////////////////////////////////////////////////////


		os := '53454E440A6162633A6465660A636F6E74656E742D6C656E6774683A350D0A0D0AAAAA00AA000D0A0A'O;
		len := f_GetSTOMPmsgLength(os);
		if (len != 41) {
			setverdict(fail, match(len, 41));
		}

		/////////////////////////////////////////////////////////////


		os := '53454E440A6162633A6465660D0A636F6E74656E742D6C656E6774683A350A6162633A6465660D0A0D0AAAAA00AA000D0A0A'O;
		len := f_GetSTOMPmsgLength(os);
		if (len != 50) {
			setverdict(fail, match(len, 50));
		}

		/////////////////////////////////////////////////////////////


		os := '53454E440A6162633A6465660D0A636F6E74656E742D6C656E6774683A350D0A6162633A6465660D0A0D0AAAAA00AA000D0A0A'O;
		len := f_GetSTOMPmsgLength(os);
		if (len != 51) {
			setverdict(fail, match(len, 51));
		}

		/////////////////////////////////////////////////////////////


		os := '53454E440A6162633A6465660D0A636F6E74656E742D6C656E6774683A350D0A6162633A6465660D0A0D0AAAAA00AA000D0A0A'O;
		len := f_GetSTOMPmsgLength(os);
		if (len != 51) {
			setverdict(fail, match(len, 51));
		}

		/////////////////////////////////////////////////////////////


		os := '53454E440A613A620A0AAAAAAAAA00'O;
		len := f_GetSTOMPmsgLength(os);
		if (len != 15) {
			setverdict(fail, match(len, 15));
		}

		/////////////////////////////////////////////////////////////


		os := '53454E440D0A613A620A0AAAAAAAAA00'O;
		len := f_GetSTOMPmsgLength(os);
		if (len != 16) {
			setverdict(fail, match(len, 16));
		}


		/////////////////////////////////////////////////////////////


		os := '53454E440D0A613A620A0AAAAAAAAA000A'O;
		len := f_GetSTOMPmsgLength(os);
		if (len != 17) {
			setverdict(fail, match(len, 17));
		}

		/////////////////////////////////////////////////////////////


		os := '53454E440D0A613A620A0AAAAAAAAA000D0A'O;
		len := f_GetSTOMPmsgLength(os);
		if (len != 18) {
			setverdict(fail, match(len, 18));
		}

		/////////////////////////////////////////////////////////////


		os := '53454E440D0A613A620D0A0AAAAAAAAA000D0A0A'O;
		len := f_GetSTOMPmsgLength(os);
		if (len != 20) {
			setverdict(fail, match(len, 20));
		}

		/////////////////////////////////////////////////////////////


		os := '53454E440D0A613A620D0A0D0AAAAAAAAA000D0A0A'O;
		len := f_GetSTOMPmsgLength(os);
		if (len != 21) {
			setverdict(fail, match(len, 21));
		}

		/////////////////////////////////////////////////////////////


		os := '53454E440D0A613A620D0A0D0AAAAAAAAA000D0A0A1231BB'O;
		len := f_GetSTOMPmsgLength(os);
		if (len != 21) {
			setverdict(fail, match(len, 21));
		}

		setverdict(pass);
	}




	control {
		execute(tc_test());
                execute(tc_encdec());
	}
}
