@@ -1429,3 +1429,296 @@ qr/elapsed in ssl_session_fetch_by_lua\*: 0\.(?:09|1[01])\d+,/,
1429
1429
[error]
1430
1430
[alert]
1431
1431
[emerg]
1432
+
1433
+
1434
+
1435
+ === TEST 18: cosocket (UDP)
1436
+ --- http_config
1437
+ ssl_session_fetch_by_lua_block {
1438
+ local sock = ngx.socket.udp()
1439
+
1440
+ sock:settimeout(1000)
1441
+
1442
+ local ok, err = sock:setpeername("127.0.0.1", $TEST_NGINX_MEMCACHED_PORT)
1443
+ if not ok then
1444
+ ngx.log(ngx.ERR, "failed to connect to memc: ", err)
1445
+ return
1446
+ end
1447
+
1448
+ local req = "\0\1\0\0\0\1\0\0flush_all\r\n"
1449
+ local ok, err = sock:send(req)
1450
+ if not ok then
1451
+ ngx.log(ngx.ERR, "failed to send flush_all to memc: ", err)
1452
+ return
1453
+ end
1454
+
1455
+ local res, err = sock:receive()
1456
+ if not res then
1457
+ ngx.log(ngx.ERR, "failed to receive memc reply: ", err)
1458
+ return
1459
+ end
1460
+
1461
+ ngx.log(ngx.INFO, "received memc reply of ", #res, " bytes")
1462
+ }
1463
+
1464
+ server {
1465
+ listen unix:$TEST_NGINX_HTML_DIR/nginx.sock ssl;
1466
+ server_name test.com;
1467
+ ssl_certificate $TEST_NGINX_CERT_DIR/cert/test.crt;
1468
+ ssl_certificate_key $TEST_NGINX_CERT_DIR/cert/test.key;
1469
+ ssl_session_tickets off;
1470
+ server_tokens off;
1471
+ }
1472
+ --- config
1473
+ server_tokens off;
1474
+ lua_ssl_trusted_certificate $TEST_NGINX_CERT_DIR/cert/test.crt;
1475
+
1476
+ location /t {
1477
+ content_by_lua_block {
1478
+ do
1479
+ local sock = ngx.socket.tcp()
1480
+
1481
+ sock:settimeout(5000)
1482
+
1483
+ local ok, err = sock:connect("unix:$TEST_NGINX_HTML_DIR/nginx.sock")
1484
+ if not ok then
1485
+ ngx.say("failed to connect: ", err)
1486
+ return
1487
+ end
1488
+
1489
+ ngx.say("connected: ", ok)
1490
+
1491
+ local sess, err = sock:sslhandshake(package.loaded.session, "test.com", true)
1492
+ if not sess then
1493
+ ngx.say("failed to do SSL handshake: ", err)
1494
+ return
1495
+ end
1496
+
1497
+ ngx.say("ssl handshake: ", type(sess))
1498
+
1499
+ package.loaded.session = sess
1500
+
1501
+ local ok, err = sock:close()
1502
+ ngx.say("close: ", ok, " ", err)
1503
+ end -- do
1504
+ -- collectgarbage()
1505
+ }
1506
+ }
1507
+ --- request
1508
+ GET /t
1509
+ --- response_body
1510
+ connected: 1
1511
+ ssl handshake: userdata
1512
+ close: 1 nil
1513
+ --- grep_error_log eval: qr/received memc reply of \d+ bytes/
1514
+ --- grep_error_log_out eval
1515
+ [
1516
+ '',
1517
+ 'received memc reply of 12 bytes
1518
+ ',
1519
+ 'received memc reply of 12 bytes
1520
+ ',
1521
+ ]
1522
+ --- no_error_log
1523
+ [alert]
1524
+ [error]
1525
+ [emerg]
1526
+
1527
+
1528
+
1529
+ === TEST 19: uthread (kill)
1530
+ --- http_config
1531
+ ssl_session_fetch_by_lua_block {
1532
+ local function f()
1533
+ ngx.log(ngx.INFO, "uthread: hello from f()")
1534
+ ngx.sleep(1)
1535
+ end
1536
+
1537
+ local t, err = ngx.thread.spawn(f)
1538
+ if not t then
1539
+ ngx.log(ngx.ERR, "failed to spawn thread: ", err)
1540
+ return
1541
+ end
1542
+
1543
+ collectgarbage()
1544
+
1545
+ local ok, err = ngx.thread.kill(t)
1546
+ if not ok then
1547
+ ngx.log(ngx.ERR, "failed to kill thread: ", err)
1548
+ return
1549
+ end
1550
+
1551
+ ngx.log(ngx.INFO, "uthread: killed")
1552
+
1553
+ local ok, err = ngx.thread.kill(t)
1554
+ if not ok then
1555
+ ngx.log(ngx.INFO, "uthread: failed to kill: ", err)
1556
+ end
1557
+ }
1558
+
1559
+ server {
1560
+ listen unix:$TEST_NGINX_HTML_DIR/nginx.sock ssl;
1561
+ server_name test.com;
1562
+ ssl_certificate $TEST_NGINX_CERT_DIR/cert/test.crt;
1563
+ ssl_certificate_key $TEST_NGINX_CERT_DIR/cert/test.key;
1564
+ ssl_session_tickets off;
1565
+ server_tokens off;
1566
+ }
1567
+ --- config
1568
+ server_tokens off;
1569
+ lua_ssl_trusted_certificate $TEST_NGINX_CERT_DIR/cert/test.crt;
1570
+
1571
+ location /t {
1572
+ content_by_lua_block {
1573
+ do
1574
+ local sock = ngx.socket.tcp()
1575
+
1576
+ sock:settimeout(5000)
1577
+
1578
+ local ok, err = sock:connect("unix:$TEST_NGINX_HTML_DIR/nginx.sock")
1579
+ if not ok then
1580
+ ngx.say("failed to connect: ", err)
1581
+ return
1582
+ end
1583
+
1584
+ ngx.say("connected: ", ok)
1585
+
1586
+ local sess, err = sock:sslhandshake(package.loaded.session, "test.com", true)
1587
+ if not sess then
1588
+ ngx.say("failed to do SSL handshake: ", err)
1589
+ return
1590
+ end
1591
+
1592
+ ngx.say("ssl handshake: ", type(sess))
1593
+
1594
+ package.loaded.session = sess
1595
+
1596
+ local ok, err = sock:close()
1597
+ ngx.say("close: ", ok, " ", err)
1598
+ end -- do
1599
+ -- collectgarbage()
1600
+ }
1601
+ }
1602
+ --- request
1603
+ GET /t
1604
+ --- response_body
1605
+ connected: 1
1606
+ ssl handshake: userdata
1607
+ close: 1 nil
1608
+ --- grep_error_log eval: qr/uthread: [^.,]+/
1609
+ --- grep_error_log_out eval
1610
+ [
1611
+ '',
1612
+ 'uthread: hello from f()
1613
+ uthread: killed
1614
+ uthread: failed to kill: already waited or killed
1615
+ ',
1616
+ 'uthread: hello from f()
1617
+ uthread: killed
1618
+ uthread: failed to kill: already waited or killed
1619
+ '
1620
+ ]
1621
+ --- no_error_log
1622
+ [alert]
1623
+ [error]
1624
+ [emerg]
1625
+
1626
+
1627
+
1628
+ === TEST 20: uthread (wait)
1629
+ --- http_config
1630
+ ssl_session_fetch_by_lua_block {
1631
+ local function f()
1632
+ ngx.log(ngx.INFO, "uthread: hello from f()")
1633
+ ngx.sleep(0.001)
1634
+ return 32
1635
+ end
1636
+
1637
+ local t, err = ngx.thread.spawn(f)
1638
+ if not t then
1639
+ ngx.log(ngx.ERR, "failed to spawn thread: ", err)
1640
+ return
1641
+ end
1642
+
1643
+ collectgarbage()
1644
+
1645
+ local ok, res = ngx.thread.wait(t)
1646
+ if not ok then
1647
+ ngx.log(ngx.ERR, "failed to wait on thread: ", res)
1648
+ return
1649
+ end
1650
+
1651
+ ngx.log(ngx.INFO, "uthread: ", res)
1652
+
1653
+ local ok, err = ngx.thread.kill(t)
1654
+ if not ok then
1655
+ ngx.log(ngx.INFO, "uthread: failed to kill: ", err)
1656
+ end
1657
+ }
1658
+
1659
+ server {
1660
+ listen unix:$TEST_NGINX_HTML_DIR/nginx.sock ssl;
1661
+ server_name test.com;
1662
+ ssl_certificate $TEST_NGINX_CERT_DIR/cert/test.crt;
1663
+ ssl_certificate_key $TEST_NGINX_CERT_DIR/cert/test.key;
1664
+ ssl_session_tickets off;
1665
+ server_tokens off;
1666
+ }
1667
+ --- config
1668
+ server_tokens off;
1669
+ lua_ssl_trusted_certificate $TEST_NGINX_CERT_DIR/cert/test.crt;
1670
+
1671
+ location /t {
1672
+ content_by_lua_block {
1673
+ do
1674
+ local sock = ngx.socket.tcp()
1675
+
1676
+ sock:settimeout(5000)
1677
+
1678
+ local ok, err = sock:connect("unix:$TEST_NGINX_HTML_DIR/nginx.sock")
1679
+ if not ok then
1680
+ ngx.say("failed to connect: ", err)
1681
+ return
1682
+ end
1683
+
1684
+ ngx.say("connected: ", ok)
1685
+
1686
+ local sess, err = sock:sslhandshake(package.loaded.session, "test.com", true)
1687
+ if not sess then
1688
+ ngx.say("failed to do SSL handshake: ", err)
1689
+ return
1690
+ end
1691
+
1692
+ ngx.say("ssl handshake: ", type(sess))
1693
+
1694
+ package.loaded.session = sess
1695
+
1696
+ local ok, err = sock:close()
1697
+ ngx.say("close: ", ok, " ", err)
1698
+ end -- do
1699
+ -- collectgarbage()
1700
+ }
1701
+ }
1702
+ --- request
1703
+ GET /t
1704
+ --- response_body
1705
+ connected: 1
1706
+ ssl handshake: userdata
1707
+ close: 1 nil
1708
+ --- grep_error_log eval: qr/uthread: [^.,]+/
1709
+ --- grep_error_log_out eval
1710
+ [
1711
+ '',
1712
+ 'uthread: hello from f()
1713
+ uthread: 32
1714
+ uthread: failed to kill: already waited or killed
1715
+ ',
1716
+ 'uthread: hello from f()
1717
+ uthread: 32
1718
+ uthread: failed to kill: already waited or killed
1719
+ '
1720
+ ]
1721
+ --- no_error_log
1722
+ [alert]
1723
+ [error]
1724
+ [emerg]
0 commit comments