shithub: rd

Download patch

ref: 4aef25cf316cd6d638c49ec8dcfb9aa454790bff
parent: 69188850d078f076e2871ba3cdfdf9aa38c1dcb7
author: Yaroslav K <yarikos@gmail.com>
date: Sun Mar 8 19:30:55 EDT 2026

add putmsg tests; fix assert failure in putlicensemsg

--- a/efs_test.c
+++ b/efs_test.c
@@ -126,6 +126,7 @@
 	testcann();
 	testcnrq();
 	audiotests();
+	msgtests();
 	print("ok\n");
 	exits(nil);
 }
--- a/ele.c
+++ b/ele.c
@@ -145,6 +145,7 @@
 		PLONG(p+8, newstate);
 		PSHORT(p+12, Berror);
 		PSHORT(p+14, 0);
+		p += 16;
 		break;
 	}
 	assert(p == ep);
--- a/mkfile
+++ b/mkfile
@@ -37,7 +37,8 @@
 TESTHFILES=audio.c
 TESTOFILES=\
 	efs_test.$O	efs.$O utf16.$O \
-	aud_test.$O	
+	aud_test.$O	\
+	msg_test.$O	x224.$O mcs.$O ele.$O mpas.$O mppc.$O alloc.$O cap.$O egdi.$O \
 
 </sys/src/cmd/mkone
 #<$PLAN9/src/mkone
--- /dev/null
+++ b/msg_test.c
@@ -1,0 +1,512 @@
+#include "msg.c"
+
+char Ebignum[]=	"number too big";
+
+static int
+testputmsg1(void){
+	int n;
+	char *s, *want;
+	uchar buf[1042];
+	Msg m;
+
+	m.type = Xconnect;
+	m.negproto = ProtoTLS;
+	n = putmsg(buf, sizeof buf, &m);
+
+	if(n < 0)
+		sysfatal("testputmsg1: unexpected error: %r\n");
+	s = smprint("%.*H", n, buf);
+	want = "0300002722E00000000000436F6F6B69653A206D737473686173683D780D0A0100080001000000";
+	if(strcmp(s, want) != 0)
+		sysfatal("testputmsg1: want %s, got %s", want, s);
+	return 0;
+
+}
+
+static int
+testputmsg2(void){
+	int n;
+	char *s, *want;
+	uchar buf[1042];
+	Msg m;
+
+	m.type = Xhangup;
+	n = putmsg(buf, sizeof buf, &m);
+
+	if(n < 0)
+		sysfatal("testputmsg2: unexpected error: %r\n");
+	s = smprint("%.*H", n, buf);
+	if(strcmp(s, want = "03000007028080") != 0)
+		sysfatal("testputmsg2: want %s, got %s", want, s);
+	return 0;
+
+}
+
+static int
+testputmsg3(void){
+	int n;
+	char *s, *want;
+	uchar buf[1042];
+	Msg m;
+
+	m.type = Mattach;
+	n = putmsg(buf, sizeof buf, &m);
+
+	if(n < 0)
+		sysfatal("testputmsg3: unexpected error: %r\n");
+	s = smprint("%.*H", n, buf);
+	if(strcmp(s, want = "0300000802F08028") != 0)
+		sysfatal("testputmsg3: want %s, got %s", want, s);
+	return 0;
+
+}
+
+static int
+testputmsg4(void){
+	int n;
+	char *s, *want;
+	uchar buf[1042];
+	Msg m;
+
+	m.type = Mjoin;
+	m.mcsuid = 0xdead;
+	m.chanid = 0xbeef;
+	n = putmsg(buf, sizeof buf, &m);
+
+	if(n < 0)
+		sysfatal("testputmsg4: unexpected error: %r\n");
+	s = smprint("%.*H", n, buf);
+	if(strcmp(s, want = "0300000C02F08038DEADBEEF") != 0)
+		sysfatal("testputmsg4: want %s, got %s", want, s);
+	return 0;
+
+}
+
+static int
+testputmsg5(void){
+	int n;
+	char *s, *want;
+	uchar buf[1042];
+	Msg m;
+
+	m.type = Merectdom;
+	n = putmsg(buf, sizeof buf, &m);
+	if(n < 0)
+		sysfatal("testputmsg5: unexpected error: %r\n");
+
+	s = smprint("%.*H", n, buf);
+	if(strcmp(s, want = "0300000C02F0800400010001") != 0)
+		sysfatal("testputmsg5: want %s, got %s", want, s);
+	return 0;
+
+}
+
+
+static int
+testputmsg6(void){
+	int n;
+	char *s, *want;
+	uchar buf[1024];
+	Msg m;
+	Vchan vctab[] = {
+		{ .mcsid = GLOBALCHAN+1, .name = "CLIPRDR", .flags = 1<<31 },
+		{ .mcsid = GLOBALCHAN+2, .name = "RDPDR", .flags = 1<<31 },
+	};
+
+	m.type = Mconnect;
+	m.ver = 0x80004;	/* RDP5 */
+	m.depth = 32;
+	m.xsz = 1024;
+	m.ysz = 768;
+	m.sysname = "TSCLIENT-TEST";
+	m.sproto = ProtoTLS;
+	m.wantconsole = 0;
+	m.nvc = 2;
+	m.vctab = vctab;
+
+	n = putmsg(buf, sizeof buf, &m);
+	if(n < 0)
+		sysfatal("testputmsg6: unexpected error: %r\n");
+
+	// Edit s/................/&" "/g
+	want =
+		"030001A602F0807F6582019A04010104" "01010101FF3020020200220202000202"
+		"02000002020001020200000202000102" "02FFFF02020002302002020001020200"
+		"01020200010202000102020000020200" "01020204200202000230200202FFFF02"
+		"02FFFF0202FFFF020200010202000002" "0200010202FFFF020200020482012700"
+		"0500147C0001811E000800100001C000" "44756361811001C0D800040008000004"
+		"000301CA03AA09040000280A00005400" "530043004C00490045004E0054002D00"
+		"54004500530054000000F90700000400" "0000000000000C000000080000000600"
+		"010044AC000044AC0000010008000000" "070002002256000044AC000002000800"
+		"00000700010044AC000044AC00000100" "0800000002000200225601CA01000000"
+		"000018000F0003000700000100000002" "00FF00000000C0004000F0000000CC01"
+		"30FF880118FF1100020022560000B956" "0000000404000200F9030200010044AC"
+		"0000A3560000000407000100000002C0" "0C00000000000000000004C00C000900"
+		"00000000000003C0200002000000434C" "49505244520080000000524450445200"
+		"000080000000";
+
+	s = smprint("%.*H", n, buf);
+	if(strcmp(s, want) != 0)
+		sysfatal("testputmsg6: want '%s', got '%s'", want, s);
+	return 0;
+
+}
+
+static int
+testputmsg7(void){
+	int n;
+	char *s, *want;
+	uchar buf[4*1024];
+	Msg m;
+
+	m.type = Dclientinfo;
+	m.mcsuid = 0xBEEF;
+	m.dom = "TESTDOM";
+	m.user = "testuser";
+	m.pass = "secret";
+	m.rshell = "explorer.exe";
+	m.rwd = "C:\\";
+	m.dologin = 1;
+
+	n = putmsg(buf, sizeof buf, &m);
+	if(n < 0)
+		sysfatal("testputmsg7: unexpected error: %r\n");
+
+	// Edit s/................................................................/&"\n		"/g
+	want = 
+		"AwABMwLwgGS+7wPrcIEkQAAAAAAAAAC7AwAADgAQAAwAGAAGAFQARQBTAFQARABP"
+		"AE0AAAB0AGUAcwB0AHUAcwBlAHIAAABzAGUAYwByAGUAdAAAAGUAeABwAGwAbwBy"
+		"AGUAcgAuAGUAeABlAAAAQwA6AFwAAAACAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAA"
+		"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+		"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+		"AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"
+		"AAAAAAAAAAAAAAAAAAAAzgAAAA==";
+
+	s = smprint("%.*[", n, buf);
+	if(strcmp(s, want) != 0)
+		sysfatal("testputmsg7: want '%s', got '%s'", want, s);
+	return 0;
+
+}
+
+static int
+testputmsg8(void){
+	int n;
+	char *s, *want;
+	uchar buf[1042];
+	Msg m;
+
+	m.type = Mactivated;
+	m.originid = 0xAAAA;
+	m.mcsuid = 0xBBBB;
+	m.shareid = 0xCCCC;
+	m.xsz = 1024;
+	m.ysz = 600;
+
+	n = putmsg(buf, sizeof buf, &m);
+	if(n < 0)
+		sysfatal("testputmsg8: unexpected error: %r\n");
+
+	// Edit s/................................................................/&"\n		"/g
+	want =
+		"AwABhALwgGS7uwPrcIF1dQETALu7zMwAAKqqBwBeAVBsYW4gOQAIAAAAAQAYAAAA"
+		"AAAAAgIAAAAFBAAAAAAAAAAAAgAeAAAAAQABAAEAAARYAgAAAQABAAAAAQAAAAIA"
+		"AwBYAAECAgQgAgIAAjAgAgL//wIAAAAAAQAUAAAAAQAAAGoAAAABAQAAAAAAAAAA"
+		"AAAAAAAAAAAAAAAAAAAAAAAAAAChBgAAAAAAAACEAwAAAAAA5AAEABMAKAAAAAAD"
+		"eAAAAHgAAABQAQAAAAAAAAAAAABUAEUAUwBUAAAA+QcIAAgAAAAUAA0AWAARAAAA"
+		"CQQAAAQAAAAAAAAADAAAAAgAAAAHAAIAIlYAAESsAAACAAgAAAAHAAEARKwAAESs"
+		"AAABAAgAAAACAAIAIlYBygEAAAAAABgADwADAAcAAAEMAAgAAAAAABQACAAAAAAA"
+		"EAA0AP4ABAD+AAQA/gAIAP4ACAD+ABAA/gAgAP4AQAD+AIAA/gAAAUAAAAgAAQAB"
+		"AAAAAA==";
+
+	s = smprint("%.*[", n, buf);
+	if(strcmp(s, want) != 0)
+		sysfatal("testputmsg8: want '%s', got '%s'", want, s);
+	return 0;
+
+}
+
+static int
+testputmsg9(void){
+	int n;
+	char *s, *want;
+	uchar buf[1042];
+	enum {
+		First=	1<<0,
+		Last=	1<<1,
+		Vis=  	1<<4,
+	};
+	Msg m = {
+		.type = Mvchan,
+		.originid = 0x1111,
+		.chanid = 0x2222,
+		.flags = First | Vis | Last,
+		.len = 7,
+		.ndata = 7,
+		.data = (uchar*)"abcdefg",
+	};
+
+	n = putmsg(buf, sizeof buf, &m);
+	if(n < 0)
+		sysfatal("testputmsg9: unexpected error: %r\n");
+
+	want = "0300001E02F080641111222270800F070000001300000061626364656667";
+
+	s = smprint("%.*H", n, buf);
+	if(strcmp(s, want) != 0)
+		sysfatal("testputmsg9: want '%s', got '%s'", want, s);
+	return 0;
+}
+
+static int
+testputmsg10(void){
+	int n;
+	char *s, *want;
+	uchar buf[512];
+	Msg m = {
+		.type = Async,
+		.mcsuid = 0x1111,
+		.originid = 0x2222,
+		.shareid = 0x3333,
+	};
+
+	n = putmsg(buf, sizeof buf, &m);
+	if(n < 0)
+		sysfatal("testputmsg10: unexpected error: %r\n");
+
+	want = "0300002502F08064222203EB70801616001700222233330000000116001F00000001001111";
+
+	s = smprint("%.*H", n, buf);
+	if(strcmp(s, want) != 0)
+		sysfatal("testputmsg10: want '%s', got '%s'", want, s);
+	return 0;
+}
+
+static int
+testputmsg11(void){
+	int n;
+	char *s, *want;
+	uchar buf[1024];
+	Msg m = {.type = Actl, .action = CAcooperate, .originid = 0x1111, .shareid = 0x2222};
+
+	n = putmsg(buf, sizeof buf, &m);
+	if(n < 0)
+		sysfatal("testputmsg11: unexpected error: %r\n");
+
+	want = "0300002902F08064111103EB70801A1A00170011112222000000011A00140000000400000000000000";
+
+	s = smprint("%.*H", n, buf);
+	if(strcmp(s, want) != 0)
+		sysfatal("testputmsg11: want '%s', got '%s'", want, s);
+	return 0;
+}
+
+static int
+testputmsg12(void){
+	int n;
+	char *s, *want;
+	uchar buf[1024];
+	Msg m = {.type = Actl, .action = CAreqctl, .originid = 0x3333, .shareid = 0x4444};
+
+	n = putmsg(buf, sizeof buf, &m);
+	if(n < 0)
+		sysfatal("testputmsg12: unexpected error: %r\n");
+
+	want = "0300002902F08064333303EB70801A1A00170033334444000000011A00140000000100000000000000";
+
+	s = smprint("%.*H", n, buf);
+	if(strcmp(s, want) != 0)
+		sysfatal("testputmsg12: want '%s', got '%s'", want, s);
+	return 0;
+}
+
+static int
+testputmsg13(void){
+	int n;
+	char *s, *want;
+	uchar buf[1024];
+	Msg m = {.type = Afontls, .originid = 0x4444, .shareid = 0x5555};
+
+	n = putmsg(buf, sizeof buf, &m);
+	if(n < 0)
+		sysfatal("testputmsg13: unexpected error: %r\n");
+
+	want = "0300002902F08064444403EB70801A1A00170044445555000000011A00270000000000000003003200";
+
+	s = smprint("%.*H", n, buf);
+	if(strcmp(s, want) != 0)
+		sysfatal("testputmsg13: want '%s', got '%s'", want, s);
+	return 0;
+}
+
+static int
+testputmsg14(void){
+	int n;
+	char *s, *want;
+	uchar buf[1042];
+	Msg m;
+
+	m.type = Ainput;
+	m.originid = 0x1111;
+	m.shareid = 0x2222;
+	m.msec = 0;
+	m.mtype = InputSync;
+	m.flags = 0;
+	m.iarg[0] = 0;
+	m.iarg[1] = 0;
+
+	n = putmsg(buf, sizeof buf, &m);
+	if(n < 0)
+		sysfatal("testputmsg14: unexpected error: %r\n");
+
+	// Edit s/................/&" "/g
+	want =
+		"0300003102F08064" "111103EB70802222" "0017001111222200" "00000122001C0000"
+		"0001000000000000" "0000000000000000" "00";
+
+	s = smprint("%.*H", n, buf);
+	if(strcmp(s, want) != 0)
+		sysfatal("testputmsg14: want '%s', got '%s'", want, s);
+	return 0;
+
+}
+
+static int
+testputmsg15(void){
+	int n;
+	char *s, *want;
+	uchar buf[1042];
+	Msg m;
+	enum {
+		Slshift=	42,
+	};
+
+	m.type = Ainput;
+	m.originid = 0x1111;
+	m.shareid = 0x2222;
+	m.msec = 0x3333;
+	m.mtype = InputKeycode;
+	m.flags = 0x44;
+	m.iarg[0] = Slshift;
+	m.iarg[1] = 0;
+
+	n = putmsg(buf, sizeof buf, &m);
+	if(n < 0)
+		sysfatal("testputmsg15: unexpected error: %r\n");
+
+	// Edit s/................/&" "/g
+	want =
+		"0300003102F08064" "111103EB70802222" "0017001111222200" "00000122001C0000"
+		"0001000000333300" "00040044002A0000" "00";
+
+	s = smprint("%.*H", n, buf);
+	if(strcmp(s, want) != 0)
+		sysfatal("testputmsg15: want '%s', got '%s'", want, s);
+	return 0;
+
+}
+
+static int
+testputmsg16(void){
+	int n;
+	char *s, *want;
+	uchar buf[2*1024];
+	Msg m = {.type = Lreq, .sysname = "TESTSYS", .user = "testuser", .originid=0x1111};
+
+	n = putmsg(buf, sizeof buf, &m);
+	if(n < 0)
+		sysfatal("testputmsg16: unexpected error: %r\n");
+
+	// Edit s/................/&" "/g
+	want = 
+		"0300008C02F08064" "111103EB70807D80" "0000001303790001" "0000000000000000"
+		"0000000000000000" "0000000000000000" "0000000000000000" "0000000000000002"
+		"0030000000000000" "0000000000000000" "0000000000000000" "0000000000000000"
+		"0000000000000000" "0000000000000000" "0000000F00090074" "6573747573657200"
+		"1000080054455354" "53595300";
+
+	s = smprint("%.*H", n, buf);
+	if(strcmp(s, want) != 0)
+		sysfatal("testputmsg16: want '%s', got '%s'", want, s);
+	return 0;
+}
+
+static int
+testputmsg17(void){
+	int n;
+	char *s, *want;
+	uchar buf[1024];
+	Msg m = {.type = Lnolicense, .originid=0x1111};
+
+	n = putmsg(buf, sizeof buf, &m);
+	if(n < 0)
+		sysfatal("testputmsg17: unexpected error: %r\n");
+
+	// Edit s/................/&" "/g
+	want =
+		"0300002302F08064" "111103EB70801480"
+		"000000FF03100002" "0000000100000004"
+		"000000";
+
+	s = smprint("%.*H", n, buf);
+	if(strcmp(s, want) != 0)
+		sysfatal("testputmsg17: want '%s', got '%s'", want, s);
+	return 0;
+}
+
+static int
+testputmsg18(void){
+	int n;
+	char *s, *want;
+	uchar buf[512];
+	Msg m = {
+		.type = Dsupress,
+		.originid = 0x2222,
+		.shareid = 0x3333,
+		.xsz = 1280,
+		.ysz = 800,
+		.allow = 1,
+	};
+
+	n = putmsg(buf, sizeof buf, &m);
+	if(n < 0)
+		sysfatal("testputmsg18: unexpected error: %r\n");
+
+	// Edit s/................/&" "/g
+	want =
+		"0300002D02F08064" "222203EB70801E1E"
+		"0017002222333300" "0000011E00230000"
+		"0001001111000000" "00FF041F03";
+
+	s = smprint("%.*H", n, buf);
+	if(strcmp(s, want) != 0)
+		sysfatal("testputmsg18: want '%s', got '%s'", want, s);
+	return 0;
+}
+
+
+int
+msgtests()
+{
+	fmtinstall('H', encodefmt);
+	fmtinstall('[', encodefmt);
+	testputmsg1();
+	testputmsg2();
+	testputmsg3();
+	testputmsg4();
+	testputmsg5();
+	testputmsg6();
+	testputmsg7();
+	testputmsg8();
+	testputmsg9();
+	testputmsg10();
+	testputmsg11();
+	testputmsg12();
+	testputmsg13();
+	testputmsg14();
+	testputmsg15();
+	testputmsg16();
+	testputmsg17();
+	testputmsg18();
+	return 0;
+}
--