Reload config file if cache is older than config
Some checks failed
Run Unit Tests / build-and-run-unit-tests (push) Failing after 6s
Some checks failed
Run Unit Tests / build-and-run-unit-tests (push) Failing after 6s
This commit is contained in:
parent
037845e501
commit
9459ec9313
5 changed files with 59 additions and 4 deletions
|
@ -27,6 +27,7 @@
|
|||
|
||||
// Third-party includes.
|
||||
#include <SimpleArchiver/src/data_structures/linked_list.h>
|
||||
#include <SimpleArchiver/src/data_structures/hash_map.h>
|
||||
#include <SimpleArchiver/src/helpers.h>
|
||||
|
||||
// Local includes.
|
||||
|
@ -206,7 +207,7 @@ int c_simple_http_cache_path(
|
|||
const char *path,
|
||||
const char *config_filename,
|
||||
const char *cache_dir,
|
||||
const C_SIMPLE_HTTP_HTTPTemplates *templates,
|
||||
C_SIMPLE_HTTP_HTTPTemplates *templates,
|
||||
char **buf_out) {
|
||||
if (!path) {
|
||||
fprintf(stderr, "ERROR cache_path function: path is NULL!\n");
|
||||
|
@ -262,6 +263,7 @@ int c_simple_http_cache_path(
|
|||
// Get "stat" info on the cache filename.
|
||||
uint_fast8_t force_cache_update = 0;
|
||||
struct stat cache_file_stat;
|
||||
memset(&cache_file_stat, 0, sizeof(struct stat));
|
||||
ret = stat(cache_filename_full, &cache_file_stat);
|
||||
if (ret == -1) {
|
||||
if (errno == ENOENT) {
|
||||
|
@ -279,6 +281,7 @@ int c_simple_http_cache_path(
|
|||
|
||||
// Get "stat" info on config file.
|
||||
struct stat config_file_stat;
|
||||
memset(&config_file_stat, 0, sizeof(struct stat));
|
||||
ret = stat(config_filename, &config_file_stat);
|
||||
if (ret == -1) {
|
||||
if (errno == ENOENT) {
|
||||
|
@ -395,6 +398,24 @@ CACHE_FILE_WRITE_CHECK:
|
|||
&& cache_file_stat.st_mtim.tv_nsec < config_file_stat.st_mtim.tv_nsec))
|
||||
{
|
||||
// Cache file is out of date.
|
||||
|
||||
if (cache_file_stat.st_mtim.tv_sec < config_file_stat.st_mtim.tv_sec
|
||||
|| (cache_file_stat.st_mtim.tv_sec == config_file_stat.st_mtim.tv_sec
|
||||
&& cache_file_stat.st_mtim.tv_nsec
|
||||
< config_file_stat.st_mtim.tv_nsec))
|
||||
{
|
||||
// Reload config file.
|
||||
C_SIMPLE_HTTP_HTTPTemplates new_parsed_config =
|
||||
c_simple_http_parse_config(
|
||||
config_filename,
|
||||
"PATH",
|
||||
NULL);
|
||||
if (new_parsed_config.hash_map) {
|
||||
simple_archiver_hash_map_free(&templates->hash_map);
|
||||
*templates = new_parsed_config;
|
||||
}
|
||||
}
|
||||
|
||||
__attribute__((cleanup(simple_archiver_helper_cleanup_FILE)))
|
||||
FILE *cache_fd = fopen(cache_filename_full, "w");
|
||||
if (fwrite("--- CACHE ENTRY ---\n", 1, 20, cache_fd) != 20) {
|
||||
|
|
|
@ -36,7 +36,7 @@ int c_simple_http_cache_path(
|
|||
const char *path,
|
||||
const char *config_filename,
|
||||
const char *cache_dir,
|
||||
const C_SIMPLE_HTTP_HTTPTemplates *templates,
|
||||
C_SIMPLE_HTTP_HTTPTemplates *templates,
|
||||
char **buf_out);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -62,7 +62,7 @@ const char *c_simple_http_response_code_error_to_response(
|
|||
char *c_simple_http_request_response(
|
||||
const char *request,
|
||||
uint32_t size,
|
||||
const C_SIMPLE_HTTP_HTTPTemplates *templates,
|
||||
C_SIMPLE_HTTP_HTTPTemplates *templates,
|
||||
size_t *out_size,
|
||||
enum C_SIMPLE_HTTP_ResponseCode *out_response_code,
|
||||
const char *cache_dir,
|
||||
|
|
|
@ -46,7 +46,7 @@ const char *c_simple_http_response_code_error_to_response(
|
|||
char *c_simple_http_request_response(
|
||||
const char *request,
|
||||
uint32_t size,
|
||||
const C_SIMPLE_HTTP_HTTPTemplates *templates,
|
||||
C_SIMPLE_HTTP_HTTPTemplates *templates,
|
||||
size_t *out_size,
|
||||
enum C_SIMPLE_HTTP_ResponseCode *out_response_code,
|
||||
const char *cache_dir,
|
||||
|
|
34
src/test.c
34
src/test.c
|
@ -908,6 +908,40 @@ int main(void) {
|
|||
ASSERT_TRUE(cache_file_exists);
|
||||
CHECK_TRUE(cache_file_size_2 == cache_file_size_3);
|
||||
|
||||
// Edit config file.
|
||||
test_file = fopen(test_http_template_filename5, "w");
|
||||
ASSERT_TRUE(test_file);
|
||||
|
||||
ASSERT_TRUE(
|
||||
fwrite(
|
||||
"PATH=/\nHTML='''<h1>{{{VAR_FILE}}}</h1>'''\n",
|
||||
1,
|
||||
42,
|
||||
test_file)
|
||||
== 42);
|
||||
ASSERT_TRUE(
|
||||
fwrite(
|
||||
"VAR_FILE=/tmp/c_simple_http_template_test_var2.html\n",
|
||||
1,
|
||||
52,
|
||||
test_file)
|
||||
== 52);
|
||||
|
||||
fclose(test_file);
|
||||
|
||||
// Re-run cache function, checking that it is invalidated.
|
||||
int_ret = c_simple_http_cache_path(
|
||||
"/",
|
||||
test_http_template_filename5,
|
||||
"/tmp/c_simple_http_cache_dir",
|
||||
&templates,
|
||||
&buf);
|
||||
CHECK_TRUE(int_ret > 0);
|
||||
ASSERT_TRUE(buf);
|
||||
CHECK_TRUE(strcmp(buf, "<h1>Alternate test text.<br>Yep.</h1>") == 0);
|
||||
free(buf);
|
||||
buf = NULL;
|
||||
|
||||
// Cleanup.
|
||||
remove("/tmp/c_simple_http_cache_dir/ROOT");
|
||||
rmdir("/tmp/c_simple_http_cache_dir");
|
||||
|
|
Loading…
Reference in a new issue