blob: 114374c05c99abc651f9e62c0360747aae4d7bb5 [file] [log] [blame]
Lawrence Tang1b0b00e2022-07-05 10:33:10 +01001#include <stdio.h>
Lawrence Tang0cb33792022-07-13 13:51:39 +01002#include <string.h>
Lawrence Tang368e0b42022-07-07 14:31:06 +01003#include "../cper-parse.h"
Lawrence Tang1b0b00e2022-07-05 10:33:10 +01004#include "json.h"
Lawrence Tang8a2d7372022-07-12 16:44:49 +01005#include "../json-schema.h"
Lawrence Tang1b0b00e2022-07-05 10:33:10 +01006
Lawrence Tangb44314c2022-07-13 11:45:22 +01007void test_ir_to_cper(int argc, char* argv[]);
8void test_cper_to_ir(int argc, char* argv[]);
Lawrence Tangf0f95572022-07-07 16:56:22 +01009
Lawrence Tangb44314c2022-07-13 11:45:22 +010010int main(int argc, char* argv[])
11{
Lawrence Tang0cb33792022-07-13 13:51:39 +010012 if (!strcmp(argv[1], "convert-to-json"))
13 test_cper_to_ir(argc, argv);
14 else if (!strcmp(argv[1], "convert-to-cper"))
15 test_ir_to_cper(argc, argv);
16 else
17 {
18 printf("Invalid command provided. Must be one of 'convert-to-json' or 'convert-to-cper'.\n");
19 }
20
Lawrence Tangb44314c2022-07-13 11:45:22 +010021 return 0;
22}
23
24void test_ir_to_cper(int argc, char* argv[])
25{
Lawrence Tang0cb33792022-07-13 13:51:39 +010026 if (argc < 4)
27 {
28 printf("Insufficient number of arguments.\n");
29 return;
30 }
31
Lawrence Tangb44314c2022-07-13 11:45:22 +010032 //Read JSON IR from file.
Lawrence Tang0cb33792022-07-13 13:51:39 +010033 json_object* ir = json_object_from_file(argv[2]);
Lawrence Tangb44314c2022-07-13 11:45:22 +010034 if (ir == NULL)
35 {
36 printf("Could not read IR JSON, import returned null.");
37 return;
38 }
39
40 //Open a read for the output file.
Lawrence Tang0cb33792022-07-13 13:51:39 +010041 FILE* cper_file = fopen(argv[3], "w");
Lawrence Tangb44314c2022-07-13 11:45:22 +010042 if (cper_file == NULL) {
43 printf("Could not open output file, file handle returned null.");
44 return;
45 }
46
47 //Run the converter.
48 ir_to_cper(ir, cper_file);
49 fclose(cper_file);
50 printf("Conversion finished!\n");
51}
52
53void test_cper_to_ir(int argc, char* argv[])
54{
Lawrence Tangf0f95572022-07-07 16:56:22 +010055 //Get a handle for the log file.
Lawrence Tang0cb33792022-07-13 13:51:39 +010056 FILE* cper_file = fopen(argv[2], "r");
Lawrence Tangf0f95572022-07-07 16:56:22 +010057 if (cper_file == NULL) {
58 printf("Could not open CPER record, file handle returned null.");
Lawrence Tangb44314c2022-07-13 11:45:22 +010059 return;
Lawrence Tangf0f95572022-07-07 16:56:22 +010060 }
61
62 json_object* ir = cper_to_ir(cper_file);
63 fclose(cper_file);
64
Lawrence Tang8a2d7372022-07-12 16:44:49 +010065 const char* json_output = json_object_to_json_string(ir);
66 printf("\n%s\n", json_output);
67
68 //Test JSON validator.
Lawrence Tang0cb33792022-07-13 13:51:39 +010069 if (argc >= 4)
Lawrence Tang8a2d7372022-07-12 16:44:49 +010070 {
Lawrence Tang0cb33792022-07-13 13:51:39 +010071 printf("Validating output with specification %s...\n", argv[3]);
Lawrence Tang8f793ac2022-07-13 10:17:09 +010072 validate_schema_debug_enable();
73 char* error_message = malloc(JSON_ERROR_MSG_MAX_LEN);
Lawrence Tang0cb33792022-07-13 13:51:39 +010074 if (!validate_schema_from_file(argv[3], ir, error_message))
Lawrence Tang8a2d7372022-07-12 16:44:49 +010075 {
76 printf("Validation failed: %s\n", error_message);
77 }
78 else
79 {
80 printf("Validation passed!\n");
81 }
82 }
Lawrence Tang1b0b00e2022-07-05 10:33:10 +010083}