diff --git a/README.md b/README.md
index 6eabfc9db..9afa97503 100755
--- a/README.md
+++ b/README.md
@@ -152,6 +152,8 @@ Please select according to languages:
### V3 changes
+* v3.0, 2019-10-30, Cover protocol stack RTMP. 3.0.63
+* v3.0, 2019-10-23, Cover JSON codec. 3.0.62
* v3.0, 2019-10-13, Use http://ossrs.net:8000 as homepage.
* v3.0, 2019-10-10, Cover AMF0 codec. 3.0.61
* v3.0, 2019-10-07, [3.0 alpha1(3.0.60)][r3.0a1] released. 107962 lines.
diff --git a/trunk/src/utest/srs_utest_protostack.cpp b/trunk/src/utest/srs_utest_protostack.cpp
index e9a2a47f4..f0f2cd200 100644
--- a/trunk/src/utest/srs_utest_protostack.cpp
+++ b/trunk/src/utest/srs_utest_protostack.cpp
@@ -34,8 +34,44 @@ using namespace std;
#include
#include
#include
+#include
-VOID TEST(ProtoStackTest, RTMPTest)
+class MockErrorPacket : public SrsPacket
{
+protected:
+ virtual int get_size() {
+ return 1024;
+ }
+};
+
+VOID TEST(ProtoStackTest, PacketEncode)
+{
+ srs_error_t err;
+
+ int size;
+ char* payload;
+
+ if (true) {
+ MockErrorPacket pkt;
+ HELPER_EXPECT_FAILED(pkt.encode(size, payload));
+ }
+
+ if (true) {
+ MockErrorPacket pkt;
+ SrsBuffer b;
+ HELPER_EXPECT_FAILED(pkt.decode(&b));
+ }
+
+ if (true) {
+ SrsPacket pkt;
+ EXPECT_EQ(0, pkt.get_prefer_cid());
+ EXPECT_EQ(0, pkt.get_message_type());
+ EXPECT_EQ(0, pkt.get_size());
+ }
+
+ if (true) {
+ MockErrorPacket pkt;
+ EXPECT_EQ(1024, pkt.get_size());
+ }
}