v10.10.2024.0601 优化Json序列化,支持DateOnly/TimeOnly,支持带时区的时间序列化
石头 编写于 2024-06-01 08:10:50
X
using System.Linq;
using NewLife;
using NewLife.Log;
using NewLife.Net;
using Xunit;

namespace XUnitTest.Net;

public class TcpConnectionInformation2Tests
{
    [Fact]
    public void GetAllTcp()
    {
        var tcps = TcpConnectionInformation2.GetWindowsTcpConnections();
        Assert.NotNull(tcps);
        Assert.True(tcps.Length > 0);
        Assert.Contains(tcps, e => e.ProcessId > 0);

        foreach (var item in tcps)
        {
            XTrace.WriteLine("{0}\t{1}\t{2}\t{3}", item.LocalEndPoint, item.RemoteEndPoint, item.State, item.ProcessId);
        }
    }

    [Fact]
    public void GetLinuxTcpConnections()
    {
        var text = """
              sl  local_address rem_address   st tx_queue rx_queue tr tm->when retrnsmt   uid  timeout inode
               0: 00000000:0016 00000000:0000 0A 00000000:00000000 00:00000000 00000000     0        0 19468 1 e15cbfaf 100 0 0 10 0
               1: 0100007F:0277 00000000:0000 0A 00000000:00000000 00:00000000 00000000     0        0 149685425 1 3678d6f4 100 0 0 10 0
               2: 0100007F:177A 00000000:0000 0A 00000000:00000000 00:00000000 00000000  1000        0 149695309 1 94cdb95b 100 0 0 10 0
               3: 0100007F:177B 00000000:0000 0A 00000000:00000000 00:00000000 00000000  1000        0 149702421 1 d7d62468 100 0 0 10 0
               4: 0100007F:177C 00000000:0000 0A 00000000:00000000 00:00000000 00000000  1000        0 149704085 1 5822fee3 100 0 0 10 0
               5: 00000000:157C 00000000:0000 0A 00000000:00000000 00:00000000 00000000     0        0 149309691 1 85d55e14 100 0 0 10 0
               6: 0100007F:177D 00000000:0000 0A 00000000:00000000 00:00000000 00000000  1000        0 149710280 1 a1609a47 100 0 0 10 0
               7: 0100007F:177E 00000000:0000 0A 00000000:00000000 00:00000000 00000000  1000        0 149711117 1 7e430ac6 100 0 0 10 0
               8: 00000000:170C 00000000:0000 0A 00000000:00000000 00:00000000 00000000     0        0 19537 1 3b81419b 100 0 0 10 0
               9: 0E00000A:0016 B90CE28B:2E99 01 00000000:00000000 02:00085E2F 00000000     0        0 149701382 2 cfff818b 25 4 17 16 -1
              10: 0E00000A:0016 B90CE28B:333E 01 00000030:00000000 01:00000018 00000000     0        0 149711082 4 df92dc4e 25 5 31 10 -1
              11: 0E00000A:0016 B90CE28B:3141 01 00000000:00000000 02:0005E6D4 00000000     0        0 149696632 2 1ea81f14 23 4 1 17 -1
              12: 0E00000A:0016 B90CE28B:3332 01 00000000:00000000 02:000AE5FB 00000000     0        0 149710902 2 45f78178 24 4 0 10 -1
              13: 0100007F:99BC 0100007F:81B1 01 00000000:00000000 00:00000000 00000000     0        0 22402 1 a005322b 21 0 0 10 -1
              14: 0E00000A:0016 B90CE28B:2EA3 01 00000000:00000000 02:000867D0 00000000     0        0 149705336 2 cf078afd 26 4 25 10 -1
              15: 0100007F:81B1 0100007F:99BC 01 00000000:00000000 00:00000000 00000000  1000        0 20368 1 9e78ef41 21 4 30 10 -1
              16: 0E00000A:0016 B90CE28B:333F 01 00000000:00000000 02:000AEE21 00000000     0        0 149711086 2 98aefdb4 24 4 0 10 -1
              17: 0E00000A:0016 B90CE28B:3117 01 00000000:00000000 02:0005D099 00000000     0        0 149696608 2 a926c1bc 24 4 17 17 -1
              18: 0E00000A:0016 B90CE28B:2E9A 01 00000000:00000000 02:00085E71 00000000     0        0 149699533 2 7956d5dc 24 5 1 16 -1
              19: 0E00000A:0016 B90CE28B:332D 01 00000000:00000000 02:000AE5C2 00000000     0        0 149710896 2 dfc11f57 24 4 9 20 -1
              20: 0E00000A:0016 B90CE28B:2EA4 01 00000000:00000000 02:00086822 00000000     0        0 149705343 2 07cfcce4 24 4 0 10 -1
              sl  local_address                         remote_address                        st tx_queue rx_queue tr tm->when retrnsmt   uid  timeout inode
               0: 00000000000000000000000000000000:0016 00000000000000000000000000000000:0000 0A 00000000:00000000 00:00000000 00000000     0        0 19470 1 e47aed0c 100 0 0 10 0
               1: 00000000000000000000000001000000:0277 00000000000000000000000000000000:0000 0A 00000000:00000000 00:00000000 00000000     0        0 149685424 1 a6e204a1 100 0 0 10 0
               2: 00000000000000000000000001000000:177A 00000000000000000000000000000000:0000 0A 00000000:00000000 00:00000000 00000000  1000        0 149695308 1 97ee3eac 100 0 0 10 0
               3: 00000000000000000000000001000000:177B 00000000000000000000000000000000:0000 0A 00000000:00000000 00:00000000 00000000  1000        0 149702420 1 a2dc1c92 100 0 0 10 0
               4: 00000000000000000000000001000000:177C 00000000000000000000000000000000:0000 0A 00000000:00000000 00:00000000 00000000  1000        0 149704084 1 bd622a42 100 0 0 10 0
               5: 00000000000000000000000000000000:157C 00000000000000000000000000000000:0000 0A 00000000:00000000 00:00000000 00000000     0        0 149309693 1 de06ed2a 100 0 0 10 0
               6: 00000000000000000000000001000000:177D 00000000000000000000000000000000:0000 0A 00000000:00000000 00:00000000 00000000  1000        0 149710279 1 3157605d 100 0 0 10 0
               7: 00000000000000000000000001000000:177E 00000000000000000000000000000000:0000 0A 00000000:00000000 00:00000000 00000000  1000        0 149711116 1 2d47393d 100 0 0 10 0
               8: 00000000000000000000000000000000:170C 00000000000000000000000000000000:0000 0A 00000000:00000000 00:00000000 00000000     0        0 19536 1 906ea452 100 0 0 10 0
               9: 0000000000000000FFFF00000E00000A:C8FA 0000000000000000FFFF00007E3B642F:19C8 01 00000000:00000000 00:00000000 00000000     0        0 149709547 1 d441315a 21 5 22 10 -1
              10: 0000000000000000FFFF00000E00000A:C304 0000000000000000FFFF00007E3B642F:19C8 01 00000000:00000000 00:00000000 00000000     0        0 149309791 1 62db7f0d 23 4 28 10 -1
              11: 0000000000000000FFFF00000E00000A:C8F8 0000000000000000FFFF00007E3B642F:19C8 06 00000000:00000000 03:000003B2 00000000     0        0 0 3 de7eabf3
              12: 0000000000000000FFFF00000E00000A:C8F6 0000000000000000FFFF00007E3B642F:19C8 06 00000000:00000000 03:000003B2 00000000     0        0 0 3 d702db02
              13: 0000000000000000FFFF00000E00000A:C8FC 0000000000000000FFFF00007E3B642F:19C8 01 00000000:00000000 00:00000000 00000000     0        0 149710184 1 0ad1e8a5 21 0 0 10 -1
              14: 0000000000000000FFFF00000E00000A:C302 0000000000000000FFFF00007E3B642F:19C8 01 00000000:00000000 00:00000000 00000000     0        0 149309243 1 c4927ab7 24 4 28 10 -1
              15: 0000000000000000FFFF00000E00000A:C8F4 0000000000000000FFFF00007E3B642F:19C8 01 00000000:00000000 00:00000000 00000000     0        0 149710854 1 d7d9b954 21 4 30 10 -1

            """;

        var tcps = TcpConnectionInformation2.ParseTcps(text);
        Assert.NotNull(tcps);
        Assert.Equal(37, tcps.Count);
        //Assert.Contains(tcps, e => e.ProcessId > 0);
        Assert.True(tcps.All(e => !e.Node.IsNullOrEmpty()));

        foreach (var item in tcps)
        {
            XTrace.WriteLine("{0}\t{1}\t{2}\t{3}", item.LocalEndPoint, item.RemoteEndPoint, item.State, item.ProcessId);
        }
    }

    [Fact]
    public void ParseSockets()
    {
        var text = """
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 1 -> socket:[157167133]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 126 -> socket:[161147360]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 188 -> socket:[157167133]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 191 -> socket:[161163117]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 2 -> socket:[157167133]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 202 -> socket:[161147987]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 217 -> socket:[161154998]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 222 -> socket:[161158272]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 225 -> socket:[161161856]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 274 -> socket:[161168816]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 303 -> socket:[157167133]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 316 -> socket:[161147391]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 317 -> socket:[161147392]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 318 -> socket:[161148035]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 325 -> socket:[161148939]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 326 -> socket:[161146808]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 327 -> socket:[161146810]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 328 -> socket:[161146812]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 329 -> socket:[161146813]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 332 -> socket:[161148940]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 333 -> socket:[161147395]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 334 -> socket:[161148057]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 335 -> socket:[161168815]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 336 -> socket:[161148061]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 337 -> socket:[161146816]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 338 -> socket:[161148944]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 339 -> socket:[161148062]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 340 -> socket:[161148945]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 341 -> socket:[161148946]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 342 -> socket:[161146819]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 343 -> socket:[161159505]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 344 -> socket:[161148063]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 345 -> socket:[161148948]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 346 -> socket:[161148065]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 347 -> socket:[161148066]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 348 -> socket:[161148067]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 349 -> socket:[161161734]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 350 -> socket:[161148068]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 351 -> socket:[161148069]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 352 -> socket:[161153793]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 353 -> socket:[161161938]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 354 -> socket:[161148960]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 355 -> socket:[161168829]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 356 -> socket:[161147401]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 357 -> socket:[161166857]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 358 -> socket:[161166573]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 368 -> socket:[161148503]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 369 -> socket:[161158077]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 370 -> socket:[161148075]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 371 -> socket:[161148076]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 372 -> socket:[161148964]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 373 -> socket:[161148078]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 374 -> socket:[161148965]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 375 -> socket:[161147439]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 376 -> socket:[161146827]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 377 -> socket:[161146829]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 378 -> socket:[161148080]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 379 -> socket:[161147441]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 380 -> socket:[161148081]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 382 -> socket:[161147442]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 383 -> socket:[161146833]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 384 -> socket:[161148084]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 385 -> socket:[161148085]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 386 -> socket:[161149033]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 387 -> socket:[161148087]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 388 -> socket:[161146835]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 389 -> socket:[161153366]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 391 -> socket:[161148094]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 392 -> socket:[161148096]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 393 -> socket:[161149034]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 394 -> socket:[161149036]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 395 -> socket:[161150059]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 397 -> socket:[161149037]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 398 -> socket:[161146838]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 399 -> socket:[161149038]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 400 -> socket:[161149040]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 401 -> socket:[161149041]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 402 -> socket:[161149042]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 403 -> socket:[161148149]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 404 -> socket:[161166131]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 405 -> socket:[161149070]
            lrwx------ 1 devuser devuser 64 Nov 12 19:49 406 -> socket:[161163967]
            lrwx------ 1 devuser devuser 64 Nov 12 19:49 407 -> socket:[161168807]
            lrwx------ 1 devuser devuser 64 Nov 12 19:49 408 -> socket:[161162053]
            lrwx------ 1 devuser devuser 64 Nov 12 19:49 409 -> socket:[161155612]
            lrwx------ 1 devuser devuser 64 Nov 12 19:50 412 -> socket:[161148425]
            lrwx------ 1 devuser devuser 64 Nov 12 19:50 413 -> socket:[161154999]
            lrwx------ 1 devuser devuser 64 Nov 12 19:50 414 -> socket:[161161859]
            lrwx------ 1 devuser devuser 64 Nov 12 19:51 415 -> socket:[161149430]
            lrwx------ 1 devuser devuser 64 Nov 12 19:51 416 -> socket:[161150104]
            lrwx------ 1 devuser devuser 64 Nov 12 19:51 418 -> socket:[161150417]
            lrwx------ 1 devuser devuser 64 Nov 12 19:51 419 -> socket:[161159207]
            lrwx------ 1 devuser devuser 64 Nov 12 19:54 421 -> socket:[161163087]
            lrwx------ 1 devuser devuser 64 Nov 12 19:54 422 -> socket:[161157889]
            lrwx------ 1 devuser devuser 64 Nov 12 19:59 430 -> socket:[161163118]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 6 -> socket:[157167133]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 69 -> socket:[157167137]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 7 -> socket:[157167133]
            lrwx------ 1 devuser devuser 64 Nov 12 19:48 9 -> socket:[161145834]
            """;

        var files = text.Split("\n");
        var nodes = TcpConnectionInformation2.ParseNodes(files);
        Assert.NotNull(nodes);
        Assert.Equal(99, nodes.Length);
        Assert.True(nodes.All(e => !e.IsNullOrEmpty()));
    }
}