diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/EventSamples/Device/AddDeviceEvent.xml b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/EventSamples/Device/AddDeviceEvent.xml
new file mode 100644
index 00000000..e0128b19
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/EventSamples/Device/AddDeviceEvent.xml
@@ -0,0 +1,9 @@
+
+
+
+
+ 1403610513
+
+
+
+
\ No newline at end of file
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/EventSamples/Device/ConnectInfoEvent.xml b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/EventSamples/Device/ConnectInfoEvent.xml
new file mode 100644
index 00000000..fd3ec9cd
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/EventSamples/Device/ConnectInfoEvent.xml
@@ -0,0 +1,8 @@
+
+
+
+
+ 1548074765
+
+ 1352460633
+
\ No newline at end of file
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/EventSamples/Device/DeleteDeviceEvent.xml b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/EventSamples/Device/DeleteDeviceEvent.xml
new file mode 100644
index 00000000..79fd88ae
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/EventSamples/Device/DeleteDeviceEvent.xml
@@ -0,0 +1,7 @@
+
+
+
+
+ 1403610513
+
+
\ No newline at end of file
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/EventSamples/Device/DeviceFeatureChangeEvent.xml b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/EventSamples/Device/DeviceFeatureChangeEvent.xml
new file mode 100644
index 00000000..a68ed34b
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/EventSamples/Device/DeviceFeatureChangeEvent.xml
@@ -0,0 +1,7 @@
+
+
+ 1568032757
+
+
+
+
\ No newline at end of file
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/EventSamples/Device/DisconnectInfoEvent.xml b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/EventSamples/Device/DisconnectInfoEvent.xml
new file mode 100644
index 00000000..9870936f
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/EventSamples/Device/DisconnectInfoEvent.xml
@@ -0,0 +1,10 @@
+
+
+
+
+ 1548074765
+
+ 1352460633
+ 1452460633
+ 1
+
\ No newline at end of file
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/EventSamples/Device/ErrorReportEvent.xml b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/EventSamples/Device/ErrorReportEvent.xml
new file mode 100644
index 00000000..8b66eefd
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/EventSamples/Device/ErrorReportEvent.xml
@@ -0,0 +1,8 @@
+
+
+
+ 1403610513
+
+ 0
+
+
\ No newline at end of file
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/EventSamples/Device/FetchLogFinishEvent.xml b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/EventSamples/Device/FetchLogFinishEvent.xml
new file mode 100644
index 00000000..08968269
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/EventSamples/Device/FetchLogFinishEvent.xml
@@ -0,0 +1,7 @@
+
+
+
+ 1548074765
+
+
+
\ No newline at end of file
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/EventSamples/Device/RemarkDeviceNameEvent.xml b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/EventSamples/Device/RemarkDeviceNameEvent.xml
new file mode 100644
index 00000000..926d85c5
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/EventSamples/Device/RemarkDeviceNameEvent.xml
@@ -0,0 +1,8 @@
+
+
+
+
+ 1403610513
+
+
+
\ No newline at end of file
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinService/Device/CgibinHardwareGetDeviceFeatureRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinService/Device/CgibinHardwareGetDeviceFeatureRequest.json
new file mode 100644
index 00000000..11c6beb1
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinService/Device/CgibinHardwareGetDeviceFeatureRequest.json
@@ -0,0 +1,3 @@
+{
+ "device_sn": "SN"
+}
\ No newline at end of file
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinService/Device/CgibinHardwareGetDeviceFeatureResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinService/Device/CgibinHardwareGetDeviceFeatureResponse.json
new file mode 100644
index 00000000..be9db484
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinService/Device/CgibinHardwareGetDeviceFeatureResponse.json
@@ -0,0 +1,5 @@
+{
+ "device_feature": "{\"printer_type\":\"CM12838-W2\"}",
+ "errcode": 0,
+ "errmsg": "ok"
+}
\ No newline at end of file
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinService/Device/CgibinServiceAddDeviceRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinService/Device/CgibinServiceAddDeviceRequest.json
new file mode 100644
index 00000000..9d3bce65
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinService/Device/CgibinServiceAddDeviceRequest.json
@@ -0,0 +1,4 @@
+{
+ "model_id": "hwme7a11fc60a668689",
+ "device_sn": "WXWK001"
+}
\ No newline at end of file
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinService/Device/CgibinServiceAddDeviceResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinService/Device/CgibinServiceAddDeviceResponse.json
new file mode 100644
index 00000000..54be4827
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinService/Device/CgibinServiceAddDeviceResponse.json
@@ -0,0 +1,12 @@
+{
+ "errcode": 0,
+ "errmsg": "ok",
+ "device_info": {
+ "model_id": "hwme7a11fc60a668689",
+ "device_sn": "testdevice001",
+ "create_time": 1540971927,
+ "secret_no": "a4f656e3d2e51566a98bd84751c9xxxx",
+ "device_id": 6618424034010721282,
+ "qr_code": "https://open.work.weixin.qq.com/connect/hardware?hw_code=Jq7BtgRwZ1Sg-xxxxx"
+ }
+}
\ No newline at end of file
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinService/Device/CgibinServiceDeleteDeviceRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinService/Device/CgibinServiceDeleteDeviceRequest.json
new file mode 100644
index 00000000..26ec6e39
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinService/Device/CgibinServiceDeleteDeviceRequest.json
@@ -0,0 +1,3 @@
+{
+ "device_sn": "WXWK001"
+}
\ No newline at end of file
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinService/Device/CgibinServiceDeleteDeviceResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinService/Device/CgibinServiceDeleteDeviceResponse.json
new file mode 100644
index 00000000..f752befe
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinService/Device/CgibinServiceDeleteDeviceResponse.json
@@ -0,0 +1,4 @@
+{
+ "errcode": 0,
+ "errmsg": "ok"
+}
\ No newline at end of file
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinService/Device/CgibinServiceFetchDeviceLogRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinService/Device/CgibinServiceFetchDeviceLogRequest.json
new file mode 100644
index 00000000..b81c9bee
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinService/Device/CgibinServiceFetchDeviceLogRequest.json
@@ -0,0 +1,4 @@
+{
+ "device_sn": "WXWK001",
+ "hint": "device_log/20190101"
+}
\ No newline at end of file
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinService/Device/CgibinServiceFetchDeviceLogResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinService/Device/CgibinServiceFetchDeviceLogResponse.json
new file mode 100644
index 00000000..f752befe
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinService/Device/CgibinServiceFetchDeviceLogResponse.json
@@ -0,0 +1,4 @@
+{
+ "errcode": 0,
+ "errmsg": "ok"
+}
\ No newline at end of file
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinService/Device/CgibinServiceGetDeviceAuthInfoRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinService/Device/CgibinServiceGetDeviceAuthInfoRequest.json
new file mode 100644
index 00000000..26ec6e39
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinService/Device/CgibinServiceGetDeviceAuthInfoRequest.json
@@ -0,0 +1,3 @@
+{
+ "device_sn": "WXWK001"
+}
\ No newline at end of file
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinService/Device/CgibinServiceGetDeviceAuthInfoResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinService/Device/CgibinServiceGetDeviceAuthInfoResponse.json
new file mode 100644
index 00000000..1909f5a7
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinService/Device/CgibinServiceGetDeviceAuthInfoResponse.json
@@ -0,0 +1,12 @@
+{
+ "errcode": 0,
+ "errmsg": "ok",
+ "auth_corp_info": {
+ "corpid": "wxf8b4f85f3a794e77",
+ "corp_name": "腾讯科技有限公司"
+ },
+ "device_info": {
+ "remark_name": "TIT-B4 401投影",
+ "model_id": "xxxxx"
+ }
+}
\ No newline at end of file
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinService/Device/CgibinServiceListDeviceRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinService/Device/CgibinServiceListDeviceRequest.json
new file mode 100644
index 00000000..131b332e
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinService/Device/CgibinServiceListDeviceRequest.json
@@ -0,0 +1,4 @@
+{
+ "offset": 1,
+ "limit": 10
+}
\ No newline at end of file
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinService/Device/CgibinServiceListDeviceResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinService/Device/CgibinServiceListDeviceResponse.json
new file mode 100644
index 00000000..3187790e
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinService/Device/CgibinServiceListDeviceResponse.json
@@ -0,0 +1,10 @@
+{
+ "errcode": 0,
+ "errmsg": "ok",
+ "device_list": [
+ {
+ "device_sn": "xxxx",
+ "model_id": "xxx"
+ }
+ ]
+}
\ No newline at end of file
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinService/Device/CgibinServiceResetSecretNumberRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinService/Device/CgibinServiceResetSecretNumberRequest.json
new file mode 100644
index 00000000..26ec6e39
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinService/Device/CgibinServiceResetSecretNumberRequest.json
@@ -0,0 +1,3 @@
+{
+ "device_sn": "WXWK001"
+}
\ No newline at end of file
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinService/Device/CgibinServiceResetSecretNumberResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinService/Device/CgibinServiceResetSecretNumberResponse.json
new file mode 100644
index 00000000..f752befe
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinService/Device/CgibinServiceResetSecretNumberResponse.json
@@ -0,0 +1,4 @@
+{
+ "errcode": 0,
+ "errmsg": "ok"
+}
\ No newline at end of file
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinService/Device/CgibinServiceSetPrinterSupportStateRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinService/Device/CgibinServiceSetPrinterSupportStateRequest.json
new file mode 100644
index 00000000..9697474f
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinService/Device/CgibinServiceSetPrinterSupportStateRequest.json
@@ -0,0 +1,4 @@
+{
+ "device_sn": "WXWK001",
+ "not_supported_printer": true
+}
\ No newline at end of file
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinService/Device/CgibinServiceSetPrinterSupportStateResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinService/Device/CgibinServiceSetPrinterSupportStateResponse.json
new file mode 100644
index 00000000..f752befe
--- /dev/null
+++ b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinService/Device/CgibinServiceSetPrinterSupportStateResponse.json
@@ -0,0 +1,4 @@
+{
+ "errcode": 0,
+ "errmsg": "ok"
+}
\ No newline at end of file
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinService/CgibinServiceGetLoginInfoRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinService/OAuth/CgibinServiceGetLoginInfoRequest.json
similarity index 100%
rename from test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinService/CgibinServiceGetLoginInfoRequest.json
rename to test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinService/OAuth/CgibinServiceGetLoginInfoRequest.json
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinService/CgibinServiceGetLoginInfoResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinService/OAuth/CgibinServiceGetLoginInfoResponse.json
similarity index 100%
rename from test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinService/CgibinServiceGetLoginInfoResponse.json
rename to test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinService/OAuth/CgibinServiceGetLoginInfoResponse.json
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinService/CgibinServiceUserDetail3rdRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinService/OAuth/CgibinServiceUserDetail3rdRequest.json
similarity index 100%
rename from test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinService/CgibinServiceUserDetail3rdRequest.json
rename to test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinService/OAuth/CgibinServiceUserDetail3rdRequest.json
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinService/CgibinServiceUserDetail3rdResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinService/OAuth/CgibinServiceUserDetail3rdResponse.json
similarity index 100%
rename from test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinService/CgibinServiceUserDetail3rdResponse.json
rename to test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinService/OAuth/CgibinServiceUserDetail3rdResponse.json
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinService/CgibinServiceUserInfo3rdRequest.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinService/OAuth/CgibinServiceUserInfo3rdRequest.json
similarity index 100%
rename from test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinService/CgibinServiceUserInfo3rdRequest.json
rename to test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinService/OAuth/CgibinServiceUserInfo3rdRequest.json
diff --git a/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinService/CgibinServiceUserInfo3rdResponse.json b/test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinService/OAuth/CgibinServiceUserInfo3rdResponse.json
similarity index 100%
rename from test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinService/CgibinServiceUserInfo3rdResponse.json
rename to test/SKIT.FlurlHttpClient.Wechat.Work.UnitTests/ModelSamples/CgibinService/OAuth/CgibinServiceUserInfo3rdResponse.json