// vtest retry: 3
module dtm
import os
import time
const temp_dtm_dir = 'dynamic_template_manager_cache_system_test'
const temp_cache_dir = 'vcache_dtm'
const temp_templates_dir = 'templates'
const temp_html_fp = 'temp.html'
const temp_html_n = 'temp'
const vtmp_dir = os.vtmp_dir()
fn testsuite_begin() {
temp_folder := os.join_path(vtmp_dir, temp_dtm_dir)
os.mkdir_all(temp_folder)!
vcache_path := os.join_path(temp_folder, temp_cache_dir)
templates_path := os.join_path(temp_folder, temp_templates_dir)
os.mkdir_all(vcache_path)!
os.mkdir_all(templates_path)!
temp_html_file := os.join_path(templates_path, temp_html_fp)
html_content := '
TEST
TEST
'
os.write_file(temp_html_file, html_content)!
}
fn test_check_and_clear_cache_files() {
dtmi := init_dtm(false, 0)
check_and_clear_cache_files(dtmi.template_cache_folder)!
count_cache_files := os.ls(dtmi.template_cache_folder)!
assert count_cache_files.len == 0
}
fn test_create_template_cache_and_display() {
mut dtmi := init_dtm(true, max_size_data_in_memory)
defer {
dtmi.stop_cache_handler()
}
html := dtmi.create_cache()
assert html.len > 10
}
fn test_get_cache() {
mut dtmi := init_dtm(true, max_size_data_in_memory)
dtmi.create_cache()
defer {
dtmi.stop_cache_handler()
}
dtm_placeholders := map[string]DtmMultiTypeMap{}
temp_html_file := os.join_path(dtmi.template_folder, temp_html_fp)
html_mem := dtmi.get_cache(temp_html_n, temp_html_file, &dtm_placeholders)
assert html_mem.len > 10
}
fn test_chandler_clear_specific_cache() {
mut dtmi := init_dtm(true, 0)
defer {
dtmi.stop_cache_handler()
}
dtmi.create_cache()
lock dtmi.template_caches {
cache_file := os.join_path(dtmi.template_cache_folder,
'${dtmi.template_caches[0].name}_${dtmi.template_caches[0].checksum}.cache')
index, is_success := dtmi.chandler_clear_specific_cache(dtmi.template_caches[0].id)
assert is_success == true
assert index == 0
cache_exist := os.exists(cache_file)
assert cache_exist == false
}
}
fn test_cache_timestamp_is_initialized() {
mut dtmi := init_dtm(true, max_size_data_in_memory)
defer {
dtmi.stop_cache_handler()
}
date_to_str := dtmi.c_time.str()
assert date_to_str.len > 10
}
fn test_process_rendered_cache_delete_request() {
mut dtmi := init_dtm(true, max_size_data_in_memory)
defer {
dtmi.stop_cache_handler()
}
dtmi.create_cache()
path_f := os.join_path(dtmi.template_folder, temp_html_fp)
lock dtmi.template_caches {
assert dtmi.template_caches[0].id == 1
assert dtmi.template_caches[0].name == temp_html_n
assert dtmi.template_caches[0].path == path_f
}
dtmi.id_to_handlered = 1
dtmi.ch_cache_handler <- TemplateCache{
id: 1
cache_request: .delete
}
dtmi.sync_cache()
rlock dtmi.template_caches {
assert dtmi.template_caches.len == 0
}
}
fn testsuite_end() {
temp_folder := os.join_path(vtmp_dir, temp_dtm_dir)
os.rmdir_all(temp_folder) or {}
}
// Utilities function :
fn init_dtm(b bool, m int) &DynamicTemplateManager {
temp_folder := os.join_path(vtmp_dir, temp_dtm_dir)
vcache_path := os.join_path(temp_folder, temp_cache_dir)
templates_path := os.join_path(temp_folder, temp_templates_dir)
init_params := DynamicTemplateManagerInitialisationParams{
active_cache_server: b
max_size_data_in_mem: m
test_cache_dir: vcache_path
test_template_dir: templates_path
}
dtm := initialize(init_params)
return dtm
}
fn (mut tm DynamicTemplateManager) create_cache() string {
temp_html_file := os.join_path(tm.template_folder, temp_html_fp)
html_last_mod := os.file_last_mod_unix(temp_html_file)
c_time := get_current_unix_micro_timestamp()
cache_delay_exp := i64(500) * i64(1000000)
placeholder := map[string]DtmMultiTypeMap{}
content_checksum := ''
html := tm.create_template_cache_and_display(.new, html_last_mod, c_time, temp_html_file,
temp_html_n, cache_delay_exp, &placeholder, content_checksum, TemplateType.html)
tm.sync_cache()
return html
}
fn (mut tm DynamicTemplateManager) sync_cache() {
mut count := 0
for {
select {
_ := <-tm.is_ready {
break
}
else {
time.sleep(50 * time.millisecond)
// Wait a total of 2 seconds to check if the data cache is ready
if count >= 40 {
tm.abort_test = true
break
}
count++
}
}
}
}