/** * 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 * * http://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. */ package org.apache.flume.channel.jdbc; import java.util.HashMap; import java.util.Map; import org.apache.flume.channel.jdbc.impl.PersistableEvent; import org.junit.Assert; import org.junit.Test; public class TestPersistentEvent { @Test public void testMarshalling() { int nameLimit = ConfigurationConstants.HEADER_NAME_LENGTH_THRESHOLD; int valLimit = ConfigurationConstants.HEADER_VALUE_LENGTH_THRESHOLD; byte[] s1 = MockEventUtils.generatePayload(1); runTest(s1, null); byte[] s2 = MockEventUtils.generatePayload(2); runTest(s2, new HashMap<String, String>()); int th = ConfigurationConstants.PAYLOAD_LENGTH_THRESHOLD; byte[] s3 = MockEventUtils.generatePayload(th - 2); Map<String, String> m3 = new HashMap<String, String>(); m3.put(MockEventUtils.generateHeaderString(1), MockEventUtils.generateHeaderString(1)); runTest(s3, m3); byte[] s4 = MockEventUtils.generatePayload(th - 1); Map<String, String> m4 = new HashMap<String, String>(); m4.put(MockEventUtils.generateHeaderString(nameLimit - 21), "w"); m4.put(MockEventUtils.generateHeaderString(nameLimit - 2), "x"); m4.put(MockEventUtils.generateHeaderString(nameLimit - 1), "y"); m4.put(MockEventUtils.generateHeaderString(nameLimit), "z"); m4.put(MockEventUtils.generateHeaderString(nameLimit + 1), "a"); m4.put(MockEventUtils.generateHeaderString(nameLimit + 2), "b"); m4.put(MockEventUtils.generateHeaderString(nameLimit + 21), "c"); runTest(s4, m4); byte[] s5 = MockEventUtils.generatePayload(th); Map<String, String> m5 = new HashMap<String, String>(); m5.put("w", MockEventUtils.generateHeaderString(valLimit - 21)); m5.put("x", MockEventUtils.generateHeaderString(valLimit - 2)); m5.put("y", MockEventUtils.generateHeaderString(valLimit - 1)); m5.put("z", MockEventUtils.generateHeaderString(valLimit)); m5.put("a", MockEventUtils.generateHeaderString(valLimit + 1)); m5.put("b", MockEventUtils.generateHeaderString(valLimit + 2)); m5.put("c", MockEventUtils.generateHeaderString(valLimit + 21)); runTest(s5, m5); byte[] s6 = MockEventUtils.generatePayload(th + 1); Map<String, String> m6 = new HashMap<String, String>(); m6.put(MockEventUtils.generateHeaderString(nameLimit - 21), MockEventUtils.generateHeaderString(valLimit - 21)); m6.put(MockEventUtils.generateHeaderString(nameLimit - 2), MockEventUtils.generateHeaderString(valLimit - 2)); m6.put(MockEventUtils.generateHeaderString(nameLimit - 1), MockEventUtils.generateHeaderString(valLimit - 1)); m6.put(MockEventUtils.generateHeaderString(nameLimit), MockEventUtils.generateHeaderString(valLimit)); m6.put(MockEventUtils.generateHeaderString(nameLimit + 1), MockEventUtils.generateHeaderString(valLimit + 1)); m6.put(MockEventUtils.generateHeaderString(nameLimit + 2), MockEventUtils.generateHeaderString(valLimit + 2)); m6.put(MockEventUtils.generateHeaderString(nameLimit + 21), MockEventUtils.generateHeaderString(valLimit + 21)); runTest(s6, m6); byte[] s7 = MockEventUtils.generatePayload(th + 2); runTest(s7, null); byte[] s8 = MockEventUtils.generatePayload(th + 27); runTest(s8, null); } private void runTest(byte[] payload, Map<String, String> headers) { PersistableEvent pe = new PersistableEvent("test", new MockEvent(payload, headers, null)); Assert.assertArrayEquals(payload, pe.getBody()); Map<String, String> h = pe.getHeaders(); if (h == null) { Assert.assertTrue(headers == null || headers.size() == 0); } else { Assert.assertTrue(headers.size() == h.size()); for (String key : h.keySet()) { Assert.assertTrue(headers.containsKey(key)); String value = h.get(key); String expectedValue = headers.remove(key); Assert.assertEquals(expectedValue, value); } Assert.assertTrue(headers.size() == 0); } } }