...

Text file src/edge-infra.dev/pkg/edge/logging/fluentbit/severity_test.lua

Documentation: edge-infra.dev/pkg/edge/logging/fluentbit

     1-- severity_test.lua
     2-- Runs unit tests against the severity filtering code from severity.lua
     3-- requires 2 arguments 
     4--   1. a path to the test library:    e.g.: /Users/ur1337/edge-infra/third_party/lua/simple_test/src
     5--   2. a path to the test target dir: e.g.: /Users/ur1337/edge-infra/pkg/edge/logging/fluentbit
     6
     7local test_library = arg[1] .. "/?.lua"
     8local target_dir = arg[2] .. "/?.lua"
     9local test_data = arg[2] .. "/testdata"
    10
    11-- the test library and target directory need to be added to package.path so we can 'require' them
    12package.path = package.path .. ";" .. test_library .. ";" .. target_dir .. ";" .. test_data
    13
    14local test = require("simple_test.init")
    15local severity = require("severity")
    16
    17local logLevelsTest = {
    18    ["cluster"] = "warning",
    19    ["namespace"] = {
    20        ["warehouse-system"] = "info",
    21        ["kinform"] = "critical"
    22    },
    23}
    24
    25local test_string_fill = "_test-pod-name_test-container-name_"
    26
    27local config_map_test_cases = {
    28    {
    29        description = "should populate the log_levels table",
    30        input = test_data .. "/log-levels-info",
    31        assert_func = function(t,result) t.not_equal(next(result), nil) end
    32    },
    33    {
    34        description = "should return cluser level = info",
    35        input = test_data .. "/log-levels-info",
    36        assert_func = function(t,result) t.equal(result.cluster, "info") end
    37    },
    38    {
    39        description = "should return an empty map if no file is found",
    40        input = test_data .. "/log-levels-file-does-not-exist",
    41        -- in lua, a call to next returns the next index of the table and its associated value. So if
    42        -- we have an empty map then the value should be nil. 
    43        assert_func = function(t,result) t.equal(next(result), nil) end
    44    },
    45    {
    46        description = "should return cluser level = error",
    47        input = test_data .. "/log-levels-error",
    48        assert_func = function(t,result) t.equal(result.cluster, "error") end
    49    },
    50    {
    51        description = "should return a critical level for a cluster with namespaces defined",
    52        input = test_data .. "/log-levels-with-ns",
    53        assert_func = function(t,result) t.equal(result.cluster, "critical") end
    54    },
    55    {
    56        description = "should return an info level for a namespace",
    57        input = test_data .. "/log-levels-with-ns",
    58        assert_func = function(t,result) t.equal(result.namespace["warehouse-system"], "info") end
    59    },
    60    {
    61        description = "should return a warning level for a namespace",
    62        input = test_data .. "/log-levels-with-ns",
    63        assert_func = function(t,result) t.equal(result.namespace["kinform"], "warning") end
    64    },
    65    {
    66        description = "should handle mixed case cluster severity levels",
    67        input = test_data .. "/log-levels-mixed-case",
    68        assert_func = function(t,result) t.equal(result.cluster, "error") end
    69    },
    70    {
    71        description = "should handle mixed case namespace severity levels",
    72        input = test_data .. "/log-levels-mixed-case",
    73        assert_func = function(t,result) t.equal(result.namespace["warehouse-system"], "info") end
    74    },
    75    {
    76        description = "should return an error level if cluster key is empty",
    77        input = test_data .. "/log-levels-cluster-empty",
    78        assert_func = function(t,result) t.equal(result.cluster, "error") end
    79    },
    80    {
    81        description = "should return an error level if cluster setting is double quote empty string",
    82        input = test_data .. "/log-levels-cluster-empty-quotes",
    83        assert_func = function(t,result) t.equal(result.cluster, "error") end
    84    },
    85    {
    86        description = "should return an error level if cluster setting is single quote empty string",
    87        input = test_data .. "/log-levels-cluster-empty-single-quotes",
    88        assert_func = function(t,result) t.equal(result.cluster, "error") end
    89    },
    90    {
    91        description = "should return an error level if no cluster setting is defined",
    92        input = test_data .. "/log-levels-no-cluster",
    93        assert_func = function(t,result) t.equal(result.cluster, "error") end
    94    },
    95    {
    96        description = "should return namespace:info if only namespaces are found ",
    97        input = test_data .. "/log-levels-no-cluster",
    98        assert_func = function(t,result) t.equal(result.namespace["warehouse-system"], "info") end
    99    },
   100    {
   101        description = "should return namespace:error if namespace value is empty",
   102        input = test_data .. "/log-levels-with-ns-quotes",
   103        assert_func = function(t,result) t.equal(result.namespace["warehouse-system"], "error") end
   104    },
   105    {
   106        description = "should ignore a line if namespace is empty",
   107        input = test_data .. "/log-levels-ns-empty",
   108        assert_func = function(t,result) t.equal(result.cluster, "critical") end
   109    },
   110    {
   111        description = "should not return a namespace value if namespace is empty",
   112        input = test_data .. "/log-levels-ns-empty",
   113        assert_func = function(t,result) t.equal(result.namespace, nil) end
   114    },
   115    {
   116        description = "should ignore a line if namespace is empty but still get other namespace levels",
   117        input = test_data .. "/log-levels-ns-empty-multi",
   118        assert_func = function(t,result) t.equal(result.namespace["warehouse-system"], "info") end
   119    },
   120    {
   121        description = "should ignore a line if namespace is defined but has an empty severity",
   122        input = test_data .. "/log-levels-ns-value-empty",
   123        assert_func = function(t,result) t.equal(result.namespace, nil) end
   124    },
   125    {
   126        description = "should ignore a line if namespace line is defined without a namespace name",
   127        input = test_data .. "/log-levels-ns-empty-missing",
   128        assert_func = function(t,result) t.equal(result.namespace, nil) end,
   129    },
   130}
   131
   132local normal_severity_test_cases = {
   133    {
   134        description = "allowed severity log level warehouse-system = info",
   135        record = {
   136            ["kubernetes"] = {
   137                ["container_name"] = "lumperctl",
   138                ["namespace_name"] = "warehouse-system"
   139            },
   140        },
   141        tag = "k8s_container.warehouse-system" .. test_string_fill,
   142        log_levels = logLevelsTest,
   143        assert_func = function(t,result) t.equal(result["info"], true) end
   144    },
   145    {
   146        description = "allowed severity log level from cluster setting",
   147        record = {
   148            ["kubernetes"] = {
   149                ["container_name"] = "lumperctl",
   150                ["namespace_name"] = "warehouse-system"
   151            },
   152        },
   153        tag = "k8s_container.warehouse-system" .. test_string_fill,
   154        log_levels = logLevelsTest,
   155        assert_func = function(t,result) t.equal(result["warning"], true) end
   156    },
   157    {
   158        description = "allowed severity log level from default setting error",
   159        record = {
   160            ["kubernetes"] = {
   161                ["container_name"] = "fluentbit",
   162                ["namespace_name"] = "fluent-operator"
   163            },
   164        },
   165        tag = "k8s_container.fluent-operator" .. test_string_fill,
   166        log_levels = {
   167            ["namespace"] = {
   168                ["warehouse-system"] = "info",
   169                ["kinform"] = "critical"
   170            },
   171        },
   172        assert_func = function(t,result) t.equal(result["error"], true) end
   173    },
   174    {
   175        description = "audit level logs, should be nil for severity",
   176        record = {
   177            ["kubernetes"] = {
   178                ["container_name"] = "lumperctl",
   179                ["namespace_name"] = "warehouse-system"
   180            },
   181            ["log_class"] = "audit",
   182        },
   183        tag = "k8s_container.warehouse-system" .. test_string_fill,
   184        log_levels = logLevelsTest,
   185        assert_func = function(t,result) t.equal(result, nil) end
   186    },
   187    {
   188        description = "security level logs, should be nil for severity",
   189        record = {
   190            ["kubernetes"] = {
   191                ["namespace_name"] = "authserver"
   192            },
   193            ["log_class"] = "security",
   194        },
   195        tag = "k8s_container.authserver_authserver_authserver",
   196        log_levels = logLevelsTest,
   197        assert_func = function(t,result) t.equal(result, nil) end
   198    },
   199    {
   200        description = "annotation to info level logs",
   201        record = {
   202            ["kubernetes"] = {
   203                ["container_name"] = "lumperctl",
   204                ["namespace_name"] = "fluent-operator",
   205                ["annotations"] = {
   206                    ["logging.edge.ncr.com/level"] = "info"
   207                }
   208            },
   209            ["log_class"] = "notice",
   210        },
   211        tag = "k8s_container.fluent-operator" .. test_string_fill,
   212        log_levels = logLevelsTest,
   213        assert_func = function(t,result) t.equal(result["info"], true) end
   214    },
   215}
   216
   217local log_replay_severity_test_cases = {
   218    {
   219        description = "allowed severity log level info: lower case",
   220        record = {
   221            ["kubernetes"] = {
   222                ["container_name"] = "lumperctl",
   223                ["namespace_name"] = "warehouse-system"
   224            },
   225            ["replay_severity"] = "info",
   226            ["log_class"] = "replay",
   227        },
   228        tag = "k8s_container.warehouse-system" .. test_string_fill,
   229        log_levels = logLevelsTest,
   230        assert_func = function(t,result) t.equal(result["info"], true) end
   231    },
   232    {
   233        description = "allowed severity log level info: upper case",
   234        record = {
   235            ["kubernetes"] = {
   236                ["container_name"] = "lumperctl",
   237                ["namespace_name"] = "warehouse-system"
   238            },
   239            ["replay_severity"] = "INFO",
   240            ["log_class"] = "replay",
   241        },
   242        tag = "k8s_container.warehouse-system" .. test_string_fill,
   243        log_levels = logLevelsTest,
   244        assert_func = function(t,result) t.equal(result["info"], true) end
   245    },
   246    {
   247        description = "allowed severity log level warning: upper case",
   248        record = {
   249            ["kubernetes"] = {
   250                ["container_name"] = "lumperctl",
   251                ["namespace_name"] = "warehouse-system"
   252            },
   253            ["replay_severity"] = "WARNING",
   254            ["log_class"] = "replay",
   255        },
   256        tag = "k8s_container.warehouse-system" .. test_string_fill,
   257        log_levels = logLevelsTest,
   258        assert_func = function(t,result) t.equal(result["warning"], true) end
   259    },
   260    {
   261        description = "no log level passed in",
   262        record = {
   263            ["kubernetes"] = {
   264                ["container_name"] = "lumperctl",
   265                ["namespace_name"] = "warehouse-system"
   266            },
   267            ["log_class"] = "replay",
   268        },
   269        tag = "k8s_container.warehouse-system" .. test_string_fill,
   270        log_levels = logLevelsTest,
   271        assert_func = function(t,result) t.equal(result, nil) end
   272    },
   273}
   274
   275print("--------------------------------------")
   276print("severity config_map_test_cases started")
   277print("--------------------------------------")
   278for _, case in ipairs(config_map_test_cases) do
   279    test(case.description, function(t)
   280        local result = severity.parse_levels_configmap(case.input)
   281        case.assert_func(t, result)
   282    end)
   283end
   284
   285print("------------------------------------------")
   286print("normal_allowed_severity_test_cases started")
   287print("-----------------------------------------")
   288for _, case in ipairs(normal_severity_test_cases) do
   289    test(case.description, function(t)
   290        local result = severity.get_allowed_severity(case.tag, case.record, case.log_levels)
   291        case.assert_func(t, result)
   292    end)
   293end
   294
   295
   296print("----------------------------------------------")
   297print("log_replay_allowed_severity_test_cases started")
   298print("----------------------------------------------")
   299for _, case in ipairs(log_replay_severity_test_cases) do
   300    test(case.description, function(t)
   301        local result = severity.get_allowed_severity(case.tag, case.record, case.log_levels)
   302        case.assert_func(t, result)
   303    end)
   304end

View as plain text