cosmopolitan/test/net/finger/fingersyn_test.c
Jōshin e16a7d8f3b
flip et / noet in modelines
`et` means `expandtab`.

```sh
rg 'vi: .* :vi' -l -0 | \
  xargs -0 sed -i '' 's/vi: \(.*\) et\(.*\)  :vi/vi: \1 xoet\2:vi/'
rg 'vi: .*  :vi' -l -0 | \
  xargs -0 sed -i '' 's/vi: \(.*\)noet\(.*\):vi/vi: \1et\2  :vi/'
rg 'vi: .*  :vi' -l -0 | \
  xargs -0 sed -i '' 's/vi: \(.*\)xoet\(.*\):vi/vi: \1noet\2:vi/'
```
2023-12-07 22:17:11 -05:00

122 lines
6.1 KiB
C

/*-*- mode:c;indent-tabs-mode:nil;c-basic-offset:2;tab-width:8;coding:utf-8 -*-│
│ vi: set et ft=c ts=2 sts=2 sw=2 fenc=utf-8 :vi │
╞══════════════════════════════════════════════════════════════════════════════╡
│ Copyright 2022 Justine Alexandra Roberts Tunney │
│ │
│ Permission to use, copy, modify, and/or distribute this software for │
│ any purpose with or without fee is hereby granted, provided that the │
│ above copyright notice and this permission notice appear in all copies. │
│ │
│ THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL │
│ WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED │
│ WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE │
│ AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL │
│ DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR │
│ PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER │
│ TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR │
│ PERFORMANCE OF THIS SOFTWARE. │
╚─────────────────────────────────────────────────────────────────────────────*/
#include "libc/dce.h"
#include "libc/stdio/stdio.h"
#include "libc/testlib/testlib.h"
#include "net/finger/finger.h"
TEST(FingerSyn, testWindows7_isWindows) {
static char s[] = "\
\x45\x00\x00\x34\x15\xa2\x40\x00\x80\x06\xbb\xfc\x7f\x0a\x0a\x96\
\x7f\x0a\x0a\x7c\xc3\x9e\x1b\x58\x12\x38\xfe\xd3\x00\x00\x00\x00\
\x80\x02\x20\x00\x35\xee\x00\x00\x02\x04\x05\xb4\x01\x03\x03\x02\
\x01\x01\x04\x02";
EXPECT_EQ(_HOSTWINDOWS, GetSynFingerOs(FingerSyn(s, sizeof(s) - 1)));
}
TEST(FingerSyn, testWindows10_isWindows) {
static char s[] = "\
\x45\x00\x00\x34\x61\x95\x40\x00\x80\x06\x70\x92\x7f\x0a\x0a\x0d\
\x7f\x0a\x0a\x7c\xed\xf2\x1b\x58\xeb\xa6\xa7\xb0\x00\x00\x00\x00\
\x80\x02\xfa\xf0\xae\xe0\x00\x00\x02\x04\x05\xb4\x01\x03\x03\x08\
\x01\x01\x04\x02";
EXPECT_EQ(_HOSTWINDOWS, GetSynFingerOs(FingerSyn(s, sizeof(s) - 1)));
}
TEST(FingerSyn, testLinuxAlpine_isLinux) {
static char s[] = "\
\x45\x00\x00\x3c\x40\x68\x40\x00\x40\x06\xd1\x48\x7f\x0a\x0a\x7c\
\x7f\x0a\x0a\x7c\xee\x32\x1b\x58\xfe\xa9\xa4\xae\x00\x00\x00\x00\
\xa0\x02\xff\xd7\x29\x3a\x00\x00\x02\x04\xff\xd7\x04\x02\x08\x0a\
\x43\x3d\xab\x7c\x00\x00\x00\x00\x01\x03\x03\x07";
EXPECT_EQ(_HOSTLINUX, GetSynFingerOs(FingerSyn(s, sizeof(s) - 1)));
}
TEST(FingerSyn, testLinuxDebian_isLinux) {
static char s[] = "\
\x45\x00\x00\x3c\xc8\xbc\x40\x00\x40\x06\x48\xf6\x7f\x0a\x0a\x7a\
\x7f\x0a\x0a\x7c\xe2\x24\x1b\x58\xf6\xe9\xf2\x85\x00\x00\x00\x00\
\xa0\x02\xfa\xf0\x5f\xac\x00\x00\x02\x04\x05\xb4\x04\x02\x08\x0a\
\x4a\x43\x93\x29\x00\x00\x00\x00\x01\x03\x03\x07";
EXPECT_EQ(_HOSTLINUX, GetSynFingerOs(FingerSyn(s, sizeof(s) - 1)));
}
TEST(FingerSyn, testLinuxFastOpen_isLinux) {
static char s[] = "\
\x45\x00\x00\x99\x6f\x97\x40\x00\x40\x06\xa1\xbc\x7f\x00\x00\x7c\
\x7f\x00\x00\x7c\xee\x3a\x1b\x58\xe1\xbd\xd2\x8d\x00\x00\x00\x00\
\xd0\x02\xff\xd7\x29\x97\x00\x00\x02\x04\xff\xd7\x04\x02\x08\x0a\
\x43\x3f\x21\xf8\x00\x00\x00\x00\x01\x03\x03\x07\x22\x0a\xd4\x75\
\x4f\x06\xc0\x97\x25\x6c\x01\x01";
EXPECT_EQ(_HOSTLINUX, GetSynFingerOs(FingerSyn(s, sizeof(s) - 1)));
}
TEST(FingerSyn, testLinuxGceVm_isLinux) {
static char s[] = "\
\x45\x20\x00\x3c\x59\x9a\x40\x00\x3b\x06\xb0\xe4\x23\xe2\xfc\xb5\
\x7f\x00\x00\x7c\xd2\xfe\x1b\x58\xf5\xb2\xf6\xca\x00\x00\x00\x00\
\xa0\x02\xff\x28\x16\xe7\x00\x00\x02\x04\x05\x8c\x04\x02\x08\x0a\
\xb6\x4d\x6b\xd8\x00\x00\x00\x00\x01\x03\x03\x07";
EXPECT_EQ(_HOSTLINUX, GetSynFingerOs(FingerSyn(s, sizeof(s) - 1)));
}
TEST(FingerSyn, testOpenbsd) {
static char s[] = "\
\x45\x00\x00\x40\x7c\x71\x40\x00\x40\x06\x95\x32\x7f\x00\x00\x85\
\x7f\x00\x00\x7c\xa2\x91\x1b\x58\x53\x54\xbc\xc5\x00\x00\x00\x00\
\xb0\x02\x40\x00\x70\xf7\x00\x00\x02\x04\x05\xb4\x01\x01\x04\x02\
\x01\x03\x03\x06\x01\x01\x08\x0a\xa2\x70\xeb\x7a\x00\x00\x00\x00";
EXPECT_EQ(_HOSTOPENBSD, GetSynFingerOs(FingerSyn(s, sizeof(s) - 1)));
}
TEST(FingerSyn, testXnu) {
static char s[] = "\
\x45\x00\x00\x40\x00\x00\x40\x00\x40\x06\x11\xb1\x7f\x00\x00\x78\
\x7f\x00\x00\x7c\xd3\x63\x1b\x58\xe6\xd5\xf8\x7e\x00\x00\x00\x00\
\xb0\x02\xff\xff\x70\x36\x00\x00\x02\x04\x05\xb4\x01\x03\x03\x06\
\x01\x01\x08\x0a\x25\x85\xaa\x28\x00\x00\x00\x00\x04\x02\x00\x00";
EXPECT_EQ(_HOSTXNU, GetSynFingerOs(FingerSyn(s, sizeof(s) - 1)));
}
TEST(FingerSyn, testFreebsd12) {
static char s[] = "\
\x45\x00\x00\x3c\x00\x00\x40\x00\x40\x06\x11\xae\x7f\x00\x00\x7f\
\x7f\x00\x00\x7c\xde\x81\x1b\x58\x23\x39\xfc\x6b\x00\x00\x00\x00\
\xa0\x02\xff\xff\x8c\x8c\x00\x00\x02\x04\x05\xb4\x01\x03\x03\x06\
\x04\x02\x08\x0a\x1f\xa1\x59\x46\x00\x00\x00\x00";
EXPECT_EQ(_HOSTFREEBSD, GetSynFingerOs(FingerSyn(s, sizeof(s) - 1)));
}
TEST(FingerSyn, testRedbeanGceVm_isFreebsd) {
static char s[] = "\
\x45\x20\x00\x3c\x00\x00\x40\x00\x3b\x06\x92\xe4\x23\xee\x74\x44\
\x7f\x00\x00\x7c\x5a\x6e\x1b\x58\x0a\x15\xba\x1a\x00\x00\x00\x00\
\xa0\x02\xff\xff\xe4\x60\x00\x00\x02\x04\x05\x8c\x01\x03\x03\x06\
\x04\x02\x08\x0a\xc9\x06\xb4\x13\x00\x00\x00\x00";
EXPECT_EQ(_HOSTFREEBSD, GetSynFingerOs(FingerSyn(s, sizeof(s) - 1)));
}
TEST(FingerSyn, testNetbsd_isFreebsdSadly) {
static char s[] = "\
\x45\x00\x00\x3c\x00\x00\x40\x00\x40\x06\x11\x98\x7f\x00\x00\x95\
\x7f\x00\x00\x7c\xfc\x18\x1b\x58\x8e\xb8\x1b\xfe\x00\x00\x00\x00\
\xa0\x02\x80\x00\xdc\xb6\x00\x00\x02\x04\x05\xb4\x01\x03\x03\x03\
\x04\x02\x08\x0a\x00\x00\x00\x01\x00\x00\x00\x00";
EXPECT_EQ(_HOSTFREEBSD, GetSynFingerOs(FingerSyn(s, sizeof(s) - 1)));
}