Fix bugs and make improvements to redbean

- Abort if .init.lua fails
- Refactor redbean to use new append library
- Use first certificate if SNI routing fails
- Use function/data sections when building Lua
- Don't use self-signed auto-generated cert for client
- Add -D staging dirs to redbean lua module default path
This commit is contained in:
Justine Tunney 2021-08-06 14:12:11 -07:00
parent 55a15c204e
commit aeeb851422
26 changed files with 703 additions and 513 deletions

View file

@ -22,14 +22,17 @@
TEST(vappendf, test) {
char *b = 0;
appendf(&b, "hello ");
ASSERT_NE(-1, appendf(&b, "hello "));
EXPECT_EQ(6, appendz(b).i);
EXPECT_EQ(0, b[appendz(b).i]);
EXPECT_EQ(6, strlen(b)); // guarantees nul terminator
appendf(&b, " world\n");
ASSERT_NE(-1, appendf(&b, " world\n"));
EXPECT_EQ(13, appendz(b).i);
EXPECT_EQ(0, b[appendz(b).i]);
EXPECT_EQ(13, strlen(b));
appendd(&b, "\0", 1); // supports binary
ASSERT_NE(-1, appendd(&b, "\0", 1)); // supports binary
EXPECT_EQ(14, appendz(b).i);
EXPECT_EQ(0, b[appendz(b).i]);
EXPECT_EQ(13, strlen(b));
EXPECT_EQ(0, b[13]);
EXPECT_EQ(0, b[14]);
@ -37,12 +40,17 @@ TEST(vappendf, test) {
free(b);
}
TEST(vappends, test) {
TEST(appends, test) {
char *b = 0;
appends(&b, "hello ");
ASSERT_NE(-1, appends(&b, ""));
EXPECT_NE(0, b);
EXPECT_EQ(0, appendz(b).i);
EXPECT_EQ(0, b[appendz(b).i]);
ASSERT_NE(-1, appends(&b, "hello "));
EXPECT_EQ(6, appendz(b).i);
EXPECT_EQ(0, b[appendz(b).i]);
EXPECT_EQ(6, strlen(b)); // guarantees nul terminator
appends(&b, " world\n");
ASSERT_NE(-1, appends(&b, " world\n"));
EXPECT_EQ(13, appendz(b).i);
EXPECT_EQ(13, strlen(b));
EXPECT_EQ(0, b[13]);
@ -50,6 +58,69 @@ TEST(vappends, test) {
free(b);
}
TEST(appendd, test) {
char *b = 0;
ASSERT_NE(-1, appendd(&b, 0, 0));
EXPECT_NE(0, b);
EXPECT_EQ(0, appendz(b).i);
EXPECT_EQ(0, b[appendz(b).i]);
ASSERT_NE(-1, appendd(&b, "hello ", 6));
EXPECT_EQ(6, appendz(b).i);
EXPECT_EQ(0, b[appendz(b).i]);
EXPECT_EQ(6, strlen(b)); // guarantees nul terminator
ASSERT_NE(-1, appendd(&b, " world\n", 7));
EXPECT_EQ(13, appendz(b).i);
EXPECT_EQ(13, strlen(b));
EXPECT_EQ(0, b[13]);
EXPECT_STREQ("hello world\n", b);
free(b);
}
TEST(appendw, test) {
char *b = 0;
ASSERT_NE(-1, appendw(&b, 0));
EXPECT_EQ(1, appendz(b).i);
EXPECT_EQ(0, b[0]);
EXPECT_EQ(0, b[1]);
ASSERT_NE(-1, appendw(&b, 'h'));
EXPECT_EQ(2, appendz(b).i);
EXPECT_EQ(0, b[0]);
EXPECT_EQ('h', b[1]);
EXPECT_EQ(0, b[2]);
ASSERT_NE(-1, appendw(&b, 'e' | 'l' << 8 | 'l' << 16 | 'o' << 24 |
(uint64_t)'!' << 32));
EXPECT_EQ(7, appendz(b).i);
EXPECT_EQ(0, b[0]);
EXPECT_EQ('h', b[1]);
EXPECT_EQ('e', b[2]);
EXPECT_EQ('l', b[3]);
EXPECT_EQ('l', b[4]);
EXPECT_EQ('o', b[5]);
EXPECT_EQ('!', b[6]);
EXPECT_EQ(0, b[7]);
free(b);
}
TEST(appendr, test) {
char *b = 0;
ASSERT_NE(-1, appends(&b, "hello"));
EXPECT_EQ(5, appendz(b).i);
ASSERT_NE(-1, appendr(&b, 1));
EXPECT_EQ(0, strcmp(b, "h"));
EXPECT_EQ(1, appendz(b).i);
ASSERT_NE(-1, appendr(&b, 0));
EXPECT_EQ(0, appendz(b).i);
EXPECT_EQ(0, strcmp(b, ""));
ASSERT_NE(-1, appendr(&b, 5));
EXPECT_EQ(0, b[0]);
EXPECT_EQ(0, b[1]);
EXPECT_EQ(0, b[2]);
EXPECT_EQ(0, b[3]);
EXPECT_EQ(0, b[4]);
EXPECT_EQ(0, b[5]);
free(b);
}
BENCH(vappendf, bench) {
const char t[] = {0};
char *b = 0;
@ -57,6 +128,8 @@ BENCH(vappendf, bench) {
free(b), b = 0;
EZBENCH2("appends", donothing, appends(&b, "1"));
free(b), b = 0;
EZBENCH2("appendw", donothing, appendw(&b, 'B'));
free(b), b = 0;
EZBENCH2("appendd", donothing, appendd(&b, t, 1));
free(b);
free(b), b = 0;
}