@@ -88,11 +88,37 @@ object ErgoCoreGenerators {
88
88
scorex.util.Random .randomBytes
89
89
}
90
90
91
+ /**
92
+ * Main KV generator: contains special handling for key.head == 0
93
+ */
91
94
def extensionKvGen (keySize : Int , valuesSize : Int ): Gen [(Array [Byte ], Array [Byte ])] = for {
92
95
key <- genSecureBoundedBytes(keySize, keySize)
93
96
value <- if (key.head == 0 ) genSecureBoundedBytes(4 , 4 ) else genSecureBoundedBytes(valuesSize, valuesSize)
94
97
} yield (key, value)
95
98
99
+ /**
100
+ * Random KV generator: all random key/values
101
+ */
102
+ def extensionKvGenImvValue (keySize : Int , valuesSize : Int ): Gen [(Array [Byte ], Array [Byte ])] = for {
103
+ key <- genSecureBoundedBytes(keySize, keySize)
104
+ value <- genSecureBoundedBytes(valuesSize, valuesSize)
105
+ } yield (key, value)
106
+
107
+ /**
108
+ * Special KV generator: does not generate key.head == 1, because improperly packed interlink
109
+ * would be generated, leading to failure.
110
+ */
111
+ def extensionKvGenValidMKV (keySize : Int , valueSize : Int ): Gen [(Array [Byte ], Array [Byte ])] = {
112
+ def keyGenHeadNotOne : Gen [Array [Byte ]] = genSecureBoundedBytes(keySize, keySize).flatMap { key =>
113
+ if (key.headOption.contains(1 .toByte)) keyGenHeadNotOne else Gen .const(key)
114
+ }
115
+
116
+ for {
117
+ key <- keyGenHeadNotOne
118
+ value <- genSecureBoundedBytes(valueSize, valueSize)
119
+ } yield (key, value)
120
+ }
121
+
96
122
lazy val extensionGen : Gen [Extension ] = for {
97
123
headerId <- modifierIdGen
98
124
mandatoryElements <- Gen .mapOf(extensionKvGen(Extension .FieldKeySize , Extension .FieldValueMaxSize ))
0 commit comments