/** * Copyright 2010 Google Inc. * * 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 org.waveprotocol.box.server.persistence.protos; import com.google.wave.api.Context; import com.google.wave.api.ProtocolVersion; import com.google.wave.api.event.EventType; import com.google.wave.api.robot.Capability; import junit.framework.TestCase; import org.waveprotocol.box.server.account.AccountData; import org.waveprotocol.box.server.account.HumanAccountData; import org.waveprotocol.box.server.account.HumanAccountDataImpl; import org.waveprotocol.box.server.account.RobotAccountData; import org.waveprotocol.box.server.account.RobotAccountDataImpl; import org.waveprotocol.box.server.authentication.PasswordDigest; import org.waveprotocol.box.server.persistence.protos.ProtoAccountStoreData.ProtoAccountData; import org.waveprotocol.box.server.robots.RobotCapabilities; import org.waveprotocol.wave.model.util.CollectionUtils; import org.waveprotocol.wave.model.wave.ParticipantId; import java.util.EnumSet; import java.util.Map; /** * Testcases for {@link ProtoAccountDataSerializer} * * @author tad.glines@gmail.com (Tad Glines) */ public class ProtoAccountDataSerializerTest extends TestCase { private static final ParticipantId HUMAN_ID = ParticipantId.ofUnsafe("human@example.com"); private static final ParticipantId ROBOT_ID = ParticipantId.ofUnsafe("robot@example.com"); private RobotAccountData robotAccount; private RobotAccountData robotAccountWithCapabilities; private HumanAccountData humanAccount; private HumanAccountData humanAccountWithDigest; @Override protected void setUp() throws Exception { super.setUp(); robotAccount = new RobotAccountDataImpl(ROBOT_ID, "example.com", "secret", null, false); Map<EventType, Capability> capabilities = CollectionUtils.newHashMap(); capabilities.put( EventType.WAVELET_BLIP_CREATED, new Capability(EventType.WAVELET_BLIP_CREATED)); capabilities.put(EventType.DOCUMENT_CHANGED, new Capability(EventType.DOCUMENT_CHANGED, CollectionUtils.newArrayList(Context.SIBLINGS))); capabilities.put(EventType.BLIP_SUBMITTED, new Capability(EventType.BLIP_SUBMITTED, CollectionUtils.newArrayList(Context.SIBLINGS, Context.PARENT), "blah")); robotAccountWithCapabilities = new RobotAccountDataImpl(ROBOT_ID, "example.com", "secret", new RobotCapabilities( capabilities, "FAKEHASH", ProtocolVersion.DEFAULT), true); humanAccount = new HumanAccountDataImpl(HUMAN_ID); humanAccountWithDigest = new HumanAccountDataImpl(HUMAN_ID, new PasswordDigest("password".toCharArray())); } private boolean compareCapability(Capability c1, Capability c2) { if (c1.getEventType() != c2.getEventType() || !c1.getFilter().equals(c2.getFilter())) { return false; } EnumSet<Context> cset1 = EnumSet.copyOf(c1.getContexts()); EnumSet<Context> cset2 = EnumSet.copyOf(c2.getContexts()); return cset1.equals(cset2); } private boolean compareRobotCapabilities(RobotCapabilities r1, RobotCapabilities r2) { if (r1.getProtocolVersion() != r2.getProtocolVersion() || !r1.getCapabilitiesHash().equals(r2.getCapabilitiesHash())) { return false; } Map<EventType, Capability> map1 = r1.getCapabilitiesMap(); Map<EventType, Capability> map2 = r1.getCapabilitiesMap(); for (EventType eventType : map1.keySet()) { Capability c1 = map1.get(eventType); Capability c2 = map2.get(eventType); if (c2 == null || !compareCapability(c1, c2)) { return false; } } for (EventType eventType : map2.keySet()) { if (!map1.containsKey(eventType)) { return false; } } return true; } public final void testHumanAccount() { ProtoAccountData data = ProtoAccountDataSerializer.serialize(humanAccount); AccountData account = ProtoAccountDataSerializer.deserialize(data); assertEquals(humanAccount, account); } public final void testHumanAccountWithDigest() { ProtoAccountData data = ProtoAccountDataSerializer.serialize(humanAccountWithDigest); AccountData account = ProtoAccountDataSerializer.deserialize(data); assertEquals(humanAccountWithDigest, account); } public final void testRobotAccount() { ProtoAccountData data = ProtoAccountDataSerializer.serialize(robotAccount); AccountData account = ProtoAccountDataSerializer.deserialize(data); assertEquals(robotAccount, account); } public final void testRobotAccountWithCapabilities() { ProtoAccountData data = ProtoAccountDataSerializer.serialize(robotAccountWithCapabilities); AccountData account = ProtoAccountDataSerializer.deserialize(data); assertEquals(robotAccountWithCapabilities, account); } }