54 lines
2.0 KiB
C
54 lines
2.0 KiB
C
#include <stdio.h>
|
|
|
|
#include "ota_url_policy.h"
|
|
|
|
typedef struct {
|
|
const char *url;
|
|
int expected;
|
|
} url_case_t;
|
|
|
|
int main(void)
|
|
{
|
|
static const url_case_t cases[] = {
|
|
{"http://101.35.224.118:8080/assets/firmware/app.bin", 1},
|
|
{"http://101.35.224.118:8080/assets/firmware/release/app.bin?token=x", 1},
|
|
{"http://talkingq.com/app.bin", 1},
|
|
{"https://talkingq.com/releases/app.bin", 1},
|
|
{"https://ota.talkingq.com/releases/app.bin", 1},
|
|
{"https://cdn.cn.talkingq.com:8443/a/B.BIN?token=x", 1},
|
|
{"https://OTA.TALKINGQ.COM/app.bin", 1},
|
|
{"https://eviltalkingq.com/app.bin", 0},
|
|
{"https://talkingq.com.evil.example/app.bin", 0},
|
|
{"https://talkingq.com@evil.example/app.bin", 0},
|
|
{"https://evil.example@talkingq.com/app.bin", 0},
|
|
{"https://a..talkingq.com/app.bin", 0},
|
|
{"https://-ota.talkingq.com/app.bin", 0},
|
|
{"https://ota-.talkingq.com/app.bin", 0},
|
|
{"https://ota.talkingq.com:0/app.bin", 0},
|
|
{"https://ota.talkingq.com:65536/app.bin", 0},
|
|
{"https://ota.talkingq.com:abc/app.bin", 0},
|
|
{"ftp://ota.talkingq.com/app.bin", 0},
|
|
{"https://ota.talkingq.com/", 0},
|
|
{"https://ota.talkingq.com/app.zip", 0},
|
|
{"https://ota.talkingq.com/app.bin/extra", 0},
|
|
{"https://ota.talkingq.com/a/../app.bin", 0},
|
|
{"https://ota.talkingq.com/app.bin#fragment", 0},
|
|
{"http://101.35.224.118:8080/other/app.bin", 0},
|
|
{"http://192.168.1.1/app.bin", 0},
|
|
};
|
|
size_t i;
|
|
|
|
for (i = 0; i < sizeof(cases) / sizeof(cases[0]); ++i) {
|
|
int actual = banban_ota_url_is_allowed(cases[i].url);
|
|
if (actual != cases[i].expected) {
|
|
fprintf(stderr, "case %lu failed: expected=%d actual=%d url=%s\n",
|
|
(unsigned long)i, cases[i].expected, actual, cases[i].url);
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
printf("OTA URL policy tests passed: %lu cases\n",
|
|
(unsigned long)(sizeof(cases) / sizeof(cases[0])));
|
|
return 0;
|
|
}
|