Package com.alibaba.otter.shared.common

Source Code of com.alibaba.otter.shared.common.JsonUtilsTest$SubPipeKey

/*
* Copyright (C) 2010-2101 Alibaba Group Holding Limited.
*
* Licensed 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 com.alibaba.otter.shared.common;

import java.io.IOException;
import java.io.StringReader;
import java.io.StringWriter;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.testng.annotations.Test;

import com.alibaba.fastjson.JSONReader;
import com.alibaba.fastjson.JSONWriter;
import com.alibaba.fastjson.TypeReference;
import com.alibaba.fastjson.annotation.JSONField;
import com.alibaba.fastjson.serializer.SerializerFeature;
import com.alibaba.otter.shared.common.model.config.Transient;
import com.alibaba.otter.shared.common.model.config.data.DataMediaType;
import com.alibaba.otter.shared.common.model.config.data.db.DbMediaSource;
import com.alibaba.otter.shared.common.utils.ByteUtils;
import com.alibaba.otter.shared.common.utils.JsonUtils;

public class JsonUtilsTest extends BaseOtterTest {

    @Test
    public void test_filter() {
        DbMediaSource media = new DbMediaSource();
        media.setGmtCreate(new Date());
        media.setGmtModified(new Date());
        media.setId(1L);
        media.setName("test");
        media.setType(DataMediaType.MYSQL);// 这个是枚举值
        media.setUsername("ljh");
        media.setPassword("ljh");

        String str = JsonUtils.marshalToString(media, "gmtCreate", "gmtModified", "id", "name", "type");
        want.string(str).notContain("id");

        DbMediaSource target = JsonUtils.unmarshalFromString(str, DbMediaSource.class);
        want.object(target.getUsername()).notNull();
        want.object(target.getPassword()).notNull();
    }

    @Test
    public void test_map_byte() {
        Map data = new HashMap<String, byte[]>();
        byte[] one = new byte[] { 1, 2, 3 };
        byte[] two = new byte[] { 4, 5, 6 };
        data.put("one", one);
        data.put("two", two);

        byte[] bytes = JsonUtils.marshalToByte(data);
        Map target = JsonUtils.unmarshalFromByte(bytes, Map.class);
        byte[] oneDates = ByteUtils.base64StringToBytes((String) target.get("one"));
        byte[] twoDates = ByteUtils.base64StringToBytes((String) target.get("two"));

        check(oneDates, one);
        check(twoDates, two);
    }

    @Test
    public void test_bytes() {
        Map data = new HashMap<String, byte[]>();
        byte[] one = new byte[] { 1, 2, 3 };
        byte[] two = new byte[] { 4, 5, 6 };
        data.put("one", one);
        data.put("two", two);

        StringWriter jsonStr = new StringWriter();
        JSONWriter writer = new JSONWriter(jsonStr);//超大文本写入
        writer.startArray();
        writer.writeValue(one);
        writer.writeValue(two);
        writer.endArray();
        try {
            writer.close();
        } catch (IOException e) {
        }

        JSONReader reader = new JSONReader(new StringReader(jsonStr.getBuffer().toString()));
        byte[] oneDates = null;
        byte[] twoDates = null;
        reader.startArray();
        while (reader.hasNext()) {
            if (oneDates == null) {
                oneDates = reader.readObject(byte[].class);
            } else if (twoDates == null) {
                twoDates = reader.readObject(byte[].class);
            } else {
                want.fail("not possible");
            }

        }
        reader.endArray();
        reader.close();
        check(oneDates, one);
        check(twoDates, two);
    }

    private void check(byte[] src, byte[] dest) {
        want.object(src).notNull();
        want.object(dest).notNull();
        want.bool(src.length == dest.length).is(true);

        for (int i = 0; i < src.length; i++) {
            if (src[i] != dest[i]) {
                want.fail();
            }
        }
    }

    @Test
    public void test_list() {
        SubPipeKey key1 = new SubPipeKey();
        key1.setId(1);
        key1.setUrl("test1");
        key1.setName("key1");

        SubPipeKey key2 = new SubPipeKey();
        key2.setId(2);
        key2.setUrl("test2");
        key2.setName("key1");

        PipeEventData<List<PipeKey>> data = new PipeEventData<List<PipeKey>>();
        data.setId(1);
        data.setKey(key1);
        String json = JsonUtils.marshalToString(data, SerializerFeature.WriteClassName);
        System.out.println(json);

        PipeEventData result = JsonUtils.unmarshalFromString(json, new TypeReference<PipeEventData<List<PipeKey>>>() {

        });
        System.out.println(result);
        want.bool(result.getKey() instanceof SubPipeKey).is(true);
    }

    @Test
    public void testTransTransient() {
        SubPipeKey key = new SubPipeKey();
        key.setName("hello");
        key.setId(1);

        String json = JsonUtils.marshalToStringWithoutTransient(key);
        System.out.println(json);
    }

    public static class PipeEventData<T> {

        @JSONField(serialzeFeatures = { SerializerFeature.WriteClassName })
        private PipeKey key;

        @JSONField(serialize = false, deserialize = true)
        private int     id;

        public PipeKey getKey() {
            return key;
        }

        public void setKey(PipeKey key) {
            this.key = key;
        }

        public int getId() {
            return id;
        }

        public void setId(int id) {
            this.id = id;
        }

    }

    public static class PipeKey {

        private String url;
        private int    id;

        public String getUrl() {
            return url;
        }

        public void setUrl(String url) {
            this.url = url;
        }

        public int getId() {
            return id;
        }

        public void setId(int id) {
            this.id = id;
        }

    }

    public static class SubPipeKey extends PipeKey {

        @Transient
        private String name = "l";

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

    }
}
TOP

Related Classes of com.alibaba.otter.shared.common.JsonUtilsTest$SubPipeKey

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.