blob 601da494a26b3a69c03d06d00e269e5f6690a0bc 4474 bytes (raw)
name: test/lisp/net/socks-tests.el # note: path name is non-authoritative(*)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
| | ;;; socks-tests.el --- tests for SOCKS -*- coding: utf-8; lexical-binding: t; -*-
;;; Commentary:
;; This file is supposed to describe (what's believed to be) an existing bug.
;;
;; | (let ((default-directory (expand-file-name "../..")))
;; | (compile "make lisp/net/socks-tests.log"))
(require 'socks)
(ert-deftest socks-filter-test-existing-behavior-v4 ()
(let* ((buf (generate-new-buffer "*test-socks-filter*"))
(proc (start-process "test-socks-filter" buf "sleep" "1")))
(process-put proc 'socks t)
(process-put proc 'socks-state socks-state-waiting)
(process-put proc 'socks-server-protocol 4)
(ert-info ("Receive initial incomplete segment")
(should (equal (string-to-vector "\0Z\0\0]¸Ø") [0 90 0 0 93 184 216]))
;; An IPv4 address from example.com OK status ^ ^ msg start
(socks-filter proc "\0Z\0\0]¸Ø")
(ert-info ("State still set to waiting")
(should (eq (process-get proc 'socks-state) socks-state-waiting)))
(ert-info ("Response field is nil because processing incomplete")
(should-not (process-get proc 'socks-response)))
(ert-info ("Scratch field holds stashed partial payload")
(should (string= "\0Z\0\0]¸Ø" (process-get proc 'socks-scratch)))))
(ert-info ("Last part arrives")
(socks-filter proc "\42") ; ?\" 34
(ert-info ("State transitions to complete (proto length check passes)")
(should (eq (process-get proc 'socks-state) socks-state-connected)))
(ert-info ("Response field holds last scratch with new segment prepended")
(should (string= "\"\0Z\0\0]¸Ø" (process-get proc 'socks-response))))
(ert-info ("Scratch remains populated, matches response field")
(should (string= "\"\0Z\0\0]¸Ø" (process-get proc 'socks-scratch)))))
(should (equal (string-to-vector "\"\0Z\0\0]¸Ø") [34 0 90 0 0 93 184 216]))
(delete-process proc)
(set-process-query-on-exit-flag proc nil)
(kill-buffer buf)))
(ert-deftest socks-filter-test-existing-behavior-v5 ()
(let* ((buf (generate-new-buffer "*test-socks-filter*"))
(proc (start-process "test-socks-filter" buf "sleep" "1")))
(process-put proc 'socks t)
(process-put proc 'socks-state socks-state-waiting)
(process-put proc 'socks-server-protocol 5)
(ert-info ("Receive initial incomplete segment")
;; An Ipv6 addr for fedora.org: 2605:bc80:3010:600:dead:beef:cafe:fed9
(should (equal (string-to-vector (concat
"\5\0\0\4"
"\x26\x05\xbc\x80\x30\x10\x00\x60"
"\xde\xad\xbe\xef\xca\xfe\xfe\xd9"
"\0\0"))
(vconcat
[5 0 0 4] ; version status (OK) noop addr-type (4 -> 6!)
[#x26 #x05 #xbc #x80 #x30 #x10 #x00 #x60]
[#xde #xad #xbe #xef #xca #xfe #xfe #xd9]
[0 0])))
(socks-filter proc "\5\0\0\4\x26\x05\xbc\x80\x30\x10\x00\x60")
(ert-info ("State still set to waiting")
(should (eq (process-get proc 'socks-state) socks-state-waiting)))
(ert-info ("Response field is nil because processing incomplete")
(should-not (process-get proc 'socks-response)))
(ert-info ("Scratch field holds partial payload of pending msg")
(should (string= "\5\0\0\4\x26\x05\xbc\x80\x30\x10\x00\x60"
(process-get proc 'socks-scratch)))))
(ert-info ("Last part arrives")
(ert-info ("Error raised because parsing logic expects appended bytes")
(let ((err (should-error (socks-filter proc "\xde\xad\xbe\xef\xca\xfe\xfe\xd9"))))
(should (equal err '(wrong-type-argument number-or-marker-p nil)))))
(ert-info ("State untouched (still waiting)")
(should (eq (process-get proc 'socks-state) socks-state-waiting)))
(ert-info ("Response field untouched")
(should-not (process-get proc 'socks-response)))
(ert-info ("Scratch contains new arrival prepended")
(should (string= (concat "\xde\xad\xbe\xef\xca\xfe\xfe\xd9"
"\5\0\0\4"
"\x26\x05\xbc\x80\x30\x10\x00\x60")
(process-get proc 'socks-scratch)))))
(delete-process proc)
(set-process-query-on-exit-flag proc nil)
(kill-buffer buf)))
;;; socks-tests.el ends here
|
debug log:
solving 601da494a26 ...
found 601da494a26 in https://yhetil.org/emacs-bugs/87r1nxu840.fsf@neverwas.me/
applying [1/1] https://yhetil.org/emacs-bugs/87r1nxu840.fsf@neverwas.me/
diff --git a/test/lisp/net/socks-tests.el b/test/lisp/net/socks-tests.el
new file mode 100644
index 00000000000..601da494a26
Checking patch test/lisp/net/socks-tests.el...
Applied patch test/lisp/net/socks-tests.el cleanly.
index at:
100644 601da494a26b3a69c03d06d00e269e5f6690a0bc test/lisp/net/socks-tests.el
(*) Git path names are given by the tree(s) the blob belongs to.
Blobs themselves have no identifier aside from the hash of its contents.^
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/emacs.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).