/* -*- Mode: C; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* vim: set ts=2 et sw=2 tw=80: */ /* Copyright 2013-2021 The Libfossil Authors, see LICENSES/BSD-2-Clause.txt SPDX-License-Identifier: BSD-2-Clause-FreeBSD SPDX-FileCopyrightText: 2021 The Libfossil Authors SPDX-ArtifactOfProjectName: Libfossil SPDX-FileType: Code Heavily indebted to the Fossil SCM project (https://fossil-scm.org). ***************************************************************************** This file holds test code for EVENT control artifacts. */ #include "libfossil.h" static struct App_ { bool crossLink; bool wetRun; } App = { 0/*crossLink*/, 0/*wetRun*/ }; /* static */ int test_event_0(){ fsl_cx * f = fcli_cx(); fsl_db * db = fsl_cx_db_repo(f); fsl_deck DECK = fsl_deck_empty; fsl_deck * d = &DECK; fsl_buffer dout = fsl_buffer_empty; int rc; double now = 0 ? 2456525.3001276273 /* 2013-08-20T19:12:11.027 */ : fsl_db_julian_now(db); if(!db){ return fsl_cx_err_set(f, FSL_RC_MISUSE, "This app requires a repo."); } FCLI_V(("now=%"FSL_JULIAN_T_PFMT"\n", now)); fsl_deck_init(f, d, FSL_SATYPE_EVENT); assert(f==d->f); assert(FSL_SATYPE_EVENT==d->type); assert(NULL==d->allocStamp); rc = fsl_deck_C_set(d, "Test event - automatically generated", -1); assert(!rc); rc = fsl_deck_D_set( d, now ); assert(!rc); #if 0 { char * eventId = fsl_db_random_hex(db, FSL_UUID_STRLEN); assert(fsl_is_uuid(eventId)); rc = fsl_deck_E_set( d, now, eventId ); fsl_free(eventId); } #else rc = fsl_deck_E_set( d, now, "b82b583b2cf60075c99e2ee5accec41906d3e6a2"); #endif assert(!rc); rc = fsl_deck_T_add( d, FSL_TAGTYPE_ADD, NULL, "automated", NULL); assert(!rc); { char * u = fsl_user_name_guess(); assert(u); rc = fsl_deck_U_set(d, u); fsl_free(u); assert(!rc); } rc = fsl_deck_W_set( d, "Test event content.", -1 ); assert(!rc); /* Note to readers: we could simplify the following greatly by using fsl_deck_save() here, but this code was largely written before fsl_deck_save() existed. */ rc = fsl_deck_output(d, fsl_output_f_buffer, &dout); fcli_err_report(1); assert(!rc); f_out("%b", &dout); if(App.crossLink){ /* Write it! */ fsl_db_transaction_begin(db); rc = fsl_deck_save(d, false); assert(!rc); assert(d->rid>0); fcli_err_report(1); FCLI_V(("Event content RID: %"FSL_ID_T_PFMT"\n", d->rid)); if(!App.wetRun){ FCLI_V(("dry-run mode: rolling back transaction.\n")); } fsl_db_transaction_end(db, rc || !App.wetRun); } fsl_buffer_clear(&dout); fsl_deck_finalize(d); return rc; } int main(int argc, char const * const * argv ){ int rc = 0; fcli_cliflag FCliFlags[] = { FCLI_FLAG_BOOL("w","wet-run",&App.wetRun, "is the opposite of the default dry-run."), FCLI_FLAG_BOOL("c","crosslink",&App.crossLink, "Crosslink the generated event."), fcli_cliflag_empty_m }; fcli_help_info FCliHelp = { "Test app for EVENT manifests", NULL, NULL }; rc = fcli_setup_v2(argc, argv, FCliFlags, &FCliHelp); if(rc) goto end; if(fcli_has_unused_flags(0)) goto end; rc = test_event_0(); end: return fcli_err_report(0) ? EXIT_FAILURE : rc; }