summaryrefslogtreecommitdiffstats
path: root/fluent-bit/lib/avro/tests/test_avro_1084.c
diff options
context:
space:
mode:
Diffstat (limited to 'fluent-bit/lib/avro/tests/test_avro_1084.c')
-rw-r--r--fluent-bit/lib/avro/tests/test_avro_1084.c73
1 files changed, 73 insertions, 0 deletions
diff --git a/fluent-bit/lib/avro/tests/test_avro_1084.c b/fluent-bit/lib/avro/tests/test_avro_1084.c
new file mode 100644
index 00000000..75d4c7a7
--- /dev/null
+++ b/fluent-bit/lib/avro/tests/test_avro_1084.c
@@ -0,0 +1,73 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to you under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * https://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ * implied. See the License for the specific language governing
+ * permissions and limitations under the License.
+ */
+
+#include <avro.h>
+#include <stdio.h>
+#include <stdlib.h>
+
+const char PERSON_SCHEMA[] =
+"{\"type\":\"record\",\
+ \"name\":\"Person\",\
+ \"fields\":[\
+ {\"name\": \"ID\", \"type\": \"long\"}]}";
+
+const char *dbname = "test.db";
+avro_schema_t schema;
+
+int main()
+{
+ avro_file_writer_t writer;
+
+ // refcount == 1
+ if (avro_schema_from_json_literal (PERSON_SCHEMA, &schema))
+ {
+ printf ("Unable to parse schema\n");
+ return EXIT_FAILURE;
+ }
+
+ // BUG: refcount == 1
+ if (avro_file_writer_create ("test.db", schema, &writer))
+ {
+ printf ("There was an error creating db: %s\n", avro_strerror());
+ return EXIT_FAILURE;
+ }
+
+ // this is "unusual" behaviour
+ // refcount == 0
+ avro_schema_decref (schema);
+
+ // crash
+ avro_datum_t main_datum = avro_record(schema);
+ avro_datum_t id_datum = avro_int32(1);
+
+ if (avro_record_set (main_datum, "ID", id_datum))
+ {
+ printf ("Unable to create datum");
+ return EXIT_FAILURE;
+ }
+
+ avro_file_writer_append (writer, main_datum);
+ avro_file_writer_flush (writer);
+ avro_file_writer_close (writer);
+ remove (dbname);
+
+ avro_datum_decref (id_datum);
+ avro_datum_decref (main_datum);
+
+ return EXIT_SUCCESS;
+}
+