diff --git a/test/bej_decoder_test.cpp b/test/bej_decoder_test.cpp
index 55b4358..b229043 100644
--- a/test/bej_decoder_test.cpp
+++ b/test/bej_decoder_test.cpp
@@ -1,8 +1,10 @@
 #include "bej_common_test.hpp"
 #include "bej_decoder_json.hpp"
+#include "bej_encoder_json.hpp"
 
 #include <memory>
 #include <string_view>
+#include <vector>
 
 #include <gmock/gmock-matchers.h>
 #include <gmock/gmock.h>
@@ -80,6 +82,65 @@
     EXPECT_TRUE(jsonDecoded.dump() == inputsOrErr->expectedJson.dump());
 }
 
+TEST(BejDecoderSecurityTest, MaxOperationsLimit)
+{
+    auto inputsOrErr = loadInputs(dummySimpleTestFiles);
+    ASSERT_TRUE(inputsOrErr);
+
+    BejDictionaries dictionaries = {
+        .schemaDictionary = inputsOrErr->schemaDictionary,
+        .annotationDictionary = inputsOrErr->annotationDictionary,
+        .errorDictionary = inputsOrErr->errorDictionary,
+    };
+
+    // Each array element below consists of a set and two properties, resulting
+    // in 3 operations. 400,000 elements will result in 1,200,000 operations,
+    // which should exceed the limit of 1,000,000.
+    constexpr int numElements = 400000;
+
+    auto root = std::make_unique<RedfishPropertyParent>();
+    bejTreeInitSet(root.get(), "DummySimple");
+
+    auto childArray = std::make_unique<RedfishPropertyParent>();
+    bejTreeInitArray(childArray.get(), "ChildArrayProperty");
+    bejTreeLinkChildToParent(root.get(), childArray.get());
+
+    std::vector<std::unique_ptr<RedfishPropertyParent>> sets;
+    std::vector<std::unique_ptr<RedfishPropertyLeafBool>> bools;
+    std::vector<std::unique_ptr<RedfishPropertyLeafEnum>> enums;
+    sets.reserve(numElements);
+    bools.reserve(numElements);
+    enums.reserve(numElements);
+
+    for (int i = 0; i < numElements; ++i)
+    {
+        auto chArraySet = std::make_unique<RedfishPropertyParent>();
+        bejTreeInitSet(chArraySet.get(), nullptr);
+
+        auto chArraySetBool = std::make_unique<RedfishPropertyLeafBool>();
+        bejTreeAddBool(chArraySet.get(), chArraySetBool.get(), "AnotherBoolean",
+                       true);
+
+        auto chArraySetLs = std::make_unique<RedfishPropertyLeafEnum>();
+        bejTreeAddEnum(chArraySet.get(), chArraySetLs.get(), "LinkStatus",
+                       "NoLink");
+
+        bejTreeLinkChildToParent(childArray.get(), chArraySet.get());
+
+        sets.push_back(std::move(chArraySet));
+        bools.push_back(std::move(chArraySetBool));
+        enums.push_back(std::move(chArraySetLs));
+    }
+
+    libbej::BejEncoderJson encoder;
+    encoder.encode(&dictionaries, bejMajorSchemaClass, root.get());
+    std::vector<uint8_t> outputBuffer = encoder.getOutput();
+
+    BejDecoderJson decoder;
+    EXPECT_THAT(decoder.decode(dictionaries, std::span(outputBuffer)),
+                bejErrorNotSuppoted);
+}
+
 /**
  * TODO: Add more test cases.
  * - Test Enums inside array elemets
