Package com.google.enterprise.connector.util.filter

Source Code of com.google.enterprise.connector.util.filter.AclpropertyFilterTest

// Copyright 2012 Google Inc. All Rights Reserved.
//
// 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.google.enterprise.connector.util.filter;

import com.google.common.base.Strings;
import com.google.enterprise.connector.spi.Document;
import com.google.enterprise.connector.spi.Principal;
import com.google.enterprise.connector.spi.Property;
import com.google.enterprise.connector.spi.SpiConstants;
import com.google.enterprise.connector.spi.SpiConstants.CaseSensitivityType;
import com.google.enterprise.connector.spi.Value;
import com.google.enterprise.connector.spiimpl.PrincipalValue;
import com.google.enterprise.connector.test.ConnectorTestUtils;

import java.util.ArrayList;
import java.util.Map;

public class AclpropertyFilterTest extends DocumentFilterTest {

    /** Creates a AclPropertyFilter. */
  protected Document createFilter(Document doc,
      CaseSensitivityType caseSensitivityType, String userDomain,
      boolean overwriteUserDomain) throws Exception {
    AclPropertyFilter factory = new AclPropertyFilter();
    if (caseSensitivityType != null) {
      factory.setCaseSensitivityType(caseSensitivityType.toString());
    }
    if (!Strings.isNullOrEmpty(userDomain)) {
      factory.setUserDomain(userDomain);
      factory.setOverwriteUserDomain(overwriteUserDomain);
    }
    return factory.newDocumentFilter(doc);
  }

  public void testAclFilterFindPropertyWithPrincipalValue() throws Exception {
    Map<String, Object> props = ConnectorTestUtils
        .createSimpleDocumentBasicProperties("testDocId");
    Principal principal = new Principal(
        SpiConstants.PrincipalType.UNQUALIFIED,null, "John Doe",
        SpiConstants.CaseSensitivityType.EVERYTHING_CASE_SENSITIVE);
    props.put(SpiConstants.PROPNAME_ACLUSERS, principal);
    Document input = ConnectorTestUtils.createSimpleDocument(props);

    Document output = createFilter(input,
        CaseSensitivityType.EVERYTHING_CASE_INSENSITIVE, null, false);
    Property prop = output.findProperty(SpiConstants.PROPNAME_ACLUSERS);
    Value value = prop.nextValue();

    Principal newPrincipal = ((PrincipalValue) value).getPrincipal();
    assertEquals(principal.getName(), newPrincipal.getName());
    assertEquals(CaseSensitivityType.EVERYTHING_CASE_INSENSITIVE,
        newPrincipal.getCaseSensitivityType());
  }

  public void testAclFilterFindPropertyWithSamePrincipalValue()
      throws Exception {
    Map<String, Object> props = ConnectorTestUtils
        .createSimpleDocumentBasicProperties("testDocId");
    Principal principal = new Principal(
        SpiConstants.PrincipalType.UNQUALIFIED, null, "John Doe",
        SpiConstants.CaseSensitivityType.EVERYTHING_CASE_SENSITIVE);
    props.put(SpiConstants.PROPNAME_ACLUSERS, principal);
    Document input = ConnectorTestUtils.createSimpleDocument(props);

    Document output = createFilter(input,
        CaseSensitivityType.EVERYTHING_CASE_SENSITIVE, null, false);
    Property prop = output.findProperty(SpiConstants.PROPNAME_ACLUSERS);
    Value value = prop.nextValue();

    Principal newPrincipal = ((PrincipalValue) value).getPrincipal();
    assertEquals(principal.getName(), newPrincipal.getName());
    assertTrue(newPrincipal.getCaseSensitivityType().equals(
        CaseSensitivityType.EVERYTHING_CASE_SENSITIVE));
  }

  public void testAclFilterFindPropertyWithNoPrincipalValue()
      throws Exception {
    Map<String, Object> props = ConnectorTestUtils
        .createSimpleDocumentBasicProperties("testDocId");
    Principal principal = new Principal(
        SpiConstants.PrincipalType.UNQUALIFIED, null, "John Doe",
        SpiConstants.CaseSensitivityType.EVERYTHING_CASE_SENSITIVE);
    props.put(SpiConstants.PROPNAME_ACLUSERS, principal);
    Document input = ConnectorTestUtils.createSimpleDocument(props);

    AclPropertyFilter factory = new AclPropertyFilter();
    Document output = factory.newDocumentFilter(input);

    Property prop = output.findProperty(SpiConstants.PROPNAME_ACLUSERS);
    Value value = prop.nextValue();

    Principal newPrincipal = ((PrincipalValue) value).getPrincipal();
    assertEquals(principal.getName(), newPrincipal.getName());
    assertEquals(CaseSensitivityType.EVERYTHING_CASE_SENSITIVE,
        newPrincipal.getCaseSensitivityType());
  }

  public void testAclFilterFindPropertyWithAclInheritFrom()
      throws Exception {
    Map<String, Object> props = ConnectorTestUtils
        .createSimpleDocumentBasicProperties("testDocId");
    Principal principal = new Principal(
        SpiConstants.PrincipalType.UNQUALIFIED, null, "John Doe",
        SpiConstants.CaseSensitivityType.EVERYTHING_CASE_SENSITIVE);
    props.put(SpiConstants.PROPNAME_ACLUSERS, principal);
    props.put(SpiConstants.PROPNAME_ACLINHERITFROM, "parentId");
    Document input = ConnectorTestUtils.createSimpleDocument(props);

    AclPropertyFilter factory = new AclPropertyFilter();
    Document output = factory.newDocumentFilter(input);

    Property prop = output.findProperty(SpiConstants.PROPNAME_ACLUSERS);
    Value value = prop.nextValue();

    Principal newPrincipal = ((PrincipalValue) value).getPrincipal();
    assertEquals(principal.getName(), newPrincipal.getName());
    assertEquals(CaseSensitivityType.EVERYTHING_CASE_SENSITIVE,
        newPrincipal.getCaseSensitivityType());

    Property propInheritFrom =
        output.findProperty(SpiConstants.PROPNAME_ACLINHERITFROM);
    Value valueInheritfrom = propInheritFrom.nextValue();
    assertEquals("parentId", valueInheritfrom.toString());
  }

  public void testAclFilterFindPropertyWithStringValues() throws Exception {
    Map<String, Object> props = ConnectorTestUtils
        .createSimpleDocumentBasicProperties("testDocId");
    ArrayList<String> userList = new ArrayList<String>();
    userList.add("John Doe");
    userList.add("GI Joe");
    props.put(SpiConstants.PROPNAME_ACLUSERS, userList);

    Document input = ConnectorTestUtils.createSimpleDocument(props);
    Document output = createFilter(input,
        CaseSensitivityType.EVERYTHING_CASE_SENSITIVE, null, false);
    Property prop = output.findProperty(SpiConstants.PROPNAME_ACLUSERS);
    Value value;
    while ((value = prop.nextValue()) != null) {
      if (value instanceof PrincipalValue) {
        Principal newPrincipal = ((PrincipalValue) value).getPrincipal();
        assertEquals(CaseSensitivityType.EVERYTHING_CASE_SENSITIVE,
            newPrincipal.getCaseSensitivityType());
      }
    }
  }

  public Document createDocument(String username, String denyUser) {
    Map<String, Object> props =
        ConnectorTestUtils.createSimpleDocumentBasicProperties("testDocId");
    if (!Strings.isNullOrEmpty(username)) {
      Principal principal =
          new Principal(SpiConstants.PrincipalType.UNKNOWN, null, username,
              SpiConstants.CaseSensitivityType.EVERYTHING_CASE_SENSITIVE);
      props.put(SpiConstants.PROPNAME_ACLUSERS, principal);
    }

    if (!Strings.isNullOrEmpty(denyUser)) {
      Principal denyprincipal =
          new Principal(SpiConstants.PrincipalType.UNKNOWN, null, denyUser,
              SpiConstants.CaseSensitivityType.EVERYTHING_CASE_SENSITIVE);
      props.put(SpiConstants.PROPNAME_ACLDENYUSERS, denyprincipal);
    }

    return ConnectorTestUtils.createSimpleDocument(props);
  }

  public Principal getPrincipal(Document output, String name)
      throws Exception {
    Property prop = output.findProperty(name);
    Value value = prop.nextValue();
    return ((PrincipalValue) value).getPrincipal();
  }

  public Principal createFilterAndGetPrinicpal(Document input,
      CaseSensitivityType caseSensitivity, String newUserDomain,
      boolean overwriteUserDomain, String name) throws Exception {
    Document output = createFilter(input, caseSensitivity, newUserDomain,
        overwriteUserDomain);
    return getPrincipal(output, name);
  }

  public void testAclFilterFindPropertyWithUserDomainValue() throws Exception {
    Document input = createDocument("John Doe", null);
    String newUserDomain = "MyCompany";
    Principal newPrincipal =
        createFilterAndGetPrinicpal(input, null, newUserDomain, false,
            SpiConstants.PROPNAME_ACLUSERS);

    assertEquals(CaseSensitivityType.EVERYTHING_CASE_SENSITIVE,
        newPrincipal.getCaseSensitivityType());
    assertTrue(newPrincipal.getName().contains(newUserDomain));
  }

  public void testAclFilterFindPropertyWithPrincipalValueAndUserDomainValue()
      throws Exception {
    Document input = createDocument("John Doe", null);
    String newUserDomain = "MyCompany";
    Principal newPrincipal = createFilterAndGetPrinicpal(input,
        CaseSensitivityType.EVERYTHING_CASE_INSENSITIVE, newUserDomain,
        false, SpiConstants.PROPNAME_ACLUSERS);

    assertEquals(CaseSensitivityType.EVERYTHING_CASE_INSENSITIVE,
        newPrincipal.getCaseSensitivityType());
    assertTrue(newPrincipal.getName().contains(newUserDomain));
  }

  public void testAclFilterFindPropertyWithEmptyUserDomainValue()
      throws Exception {
    Document input = createDocument("John Doe", null);
    String newUserDomain = "";
    Principal newPrincipal = createFilterAndGetPrinicpal(input,
        CaseSensitivityType.EVERYTHING_CASE_INSENSITIVE,  newUserDomain, false,
        SpiConstants.PROPNAME_ACLUSERS);

    assertEquals(CaseSensitivityType.EVERYTHING_CASE_INSENSITIVE,
        newPrincipal.getCaseSensitivityType());
    assertEquals("John Doe", newPrincipal.getName());
    assertTrue(newPrincipal.getName().contains(newUserDomain));
  }

  public void testAclFilterFindPropertyWithEmptyDenyUserDomainValue()
      throws Exception {
    Document input = createDocument(null, "John Doe");
    String newUserDomain = "";
    Principal newPrincipal = createFilterAndGetPrinicpal(input,
        CaseSensitivityType.EVERYTHING_CASE_INSENSITIVE,  newUserDomain, false,
        SpiConstants.PROPNAME_ACLDENYUSERS);

    assertEquals(CaseSensitivityType.EVERYTHING_CASE_INSENSITIVE,
        newPrincipal.getCaseSensitivityType());
    assertEquals("John Doe", newPrincipal.getName());
    assertTrue(newPrincipal.getName().contains(newUserDomain));
  }

  public void testAclFilterFindPropertyOverwriteUserDomainValue()
      throws Exception {
    Document input = createDocument("noCompany\\John Doe", null);
    String newUserDomain = "MyCompany";
    Principal newPrincipal = createFilterAndGetPrinicpal(input,
        CaseSensitivityType.EVERYTHING_CASE_INSENSITIVE, newUserDomain, true,
        SpiConstants.PROPNAME_ACLUSERS);

    assertEquals(CaseSensitivityType.EVERYTHING_CASE_INSENSITIVE,
        newPrincipal.getCaseSensitivityType());
    assertTrue(newPrincipal.getName().contains(newUserDomain));
  }

  public void testAclFilterFindPropertyOverwriteDenyUserDomainValue()
      throws Exception {
    Document input = createDocument(null, "noCompany\\John Doe");
    String newUserDomain = "MyCompany";
    Principal newPrincipal = createFilterAndGetPrinicpal(input,
        CaseSensitivityType.EVERYTHING_CASE_INSENSITIVE, newUserDomain, true,
        SpiConstants.PROPNAME_ACLDENYUSERS);

    assertEquals(CaseSensitivityType.EVERYTHING_CASE_INSENSITIVE,
        newPrincipal.getCaseSensitivityType());
    assertTrue(newPrincipal.getName().contains(newUserDomain));
  }

  public void testAclFilterFindPropertyOverwriteUserDomainValueFormat2()
      throws Exception {
    Document input = createDocument("John Doe@noCompany", null);
    String newUserDomain = "MyCompany";
    Principal newPrincipal = createFilterAndGetPrinicpal(input,
        CaseSensitivityType.EVERYTHING_CASE_INSENSITIVE, newUserDomain, true,
        SpiConstants.PROPNAME_ACLUSERS);

    assertEquals(CaseSensitivityType.EVERYTHING_CASE_INSENSITIVE,
        newPrincipal.getCaseSensitivityType());
    assertTrue(newPrincipal.getName().contains(newUserDomain));
  }

  public void testAclFilterFindPropertyOverwriteDenyUserDomainValueFormat2()
      throws Exception {
    Document input = createDocument(null, "John Doe@noCompany");
    String newUserDomain = "MyCompany";
    Principal newPrincipal = createFilterAndGetPrinicpal(input,
        CaseSensitivityType.EVERYTHING_CASE_INSENSITIVE, newUserDomain, true,
        SpiConstants.PROPNAME_ACLDENYUSERS);

    assertEquals(CaseSensitivityType.EVERYTHING_CASE_INSENSITIVE,
        newPrincipal.getCaseSensitivityType());
    assertTrue(newPrincipal.getName().contains(newUserDomain));
  }

  public void testAclFilterFindPropertyNoOverwriteUserDomainValue()
      throws Exception {
    Document input = createDocument("noCompany\\John Doe", null);
    String newUserDomain = "MyCompany";
    Principal newPrincipal =
        createFilterAndGetPrinicpal(input, null, newUserDomain, false,
            SpiConstants.PROPNAME_ACLUSERS);

    assertEquals(CaseSensitivityType.EVERYTHING_CASE_SENSITIVE,
        newPrincipal.getCaseSensitivityType());
    assertEquals("noCompany\\John Doe", newPrincipal.getName());
    assertFalse(newPrincipal.getName().contains(newUserDomain));
  }

  public void testAclFilterFindPropertyNoOverwriteDenyUserDomainValue()
      throws Exception {
    Document input = createDocument(null, "noCompany\\John Doe");
    String newUserDomain = "MyCompany";
    Principal newPrincipal =
        createFilterAndGetPrinicpal(input, null, newUserDomain, false,
            SpiConstants.PROPNAME_ACLDENYUSERS);

    assertEquals(CaseSensitivityType.EVERYTHING_CASE_SENSITIVE,
        newPrincipal.getCaseSensitivityType());
    assertEquals("noCompany\\John Doe", newPrincipal.getName());
    assertFalse(newPrincipal.getName().contains(newUserDomain));
  }

  public void testAclFilterUserDomainForPrincipalType() throws Exception {
    Map<String, Object> props = ConnectorTestUtils
        .createSimpleDocumentBasicProperties("testDocId");
    Principal principal = new Principal(
        SpiConstants.PrincipalType.UNQUALIFIED, null, "John Doe",
        SpiConstants.CaseSensitivityType.EVERYTHING_CASE_SENSITIVE);
    props.put(SpiConstants.PROPNAME_ACLUSERS, principal);
    Document input = ConnectorTestUtils.createSimpleDocument(props);

    String newUserDomain = "MyCompany";
    Principal newPrincipal = createFilterAndGetPrinicpal(input,
        CaseSensitivityType.EVERYTHING_CASE_SENSITIVE, newUserDomain, false,
        SpiConstants.PROPNAME_ACLUSERS);

    assertEquals(CaseSensitivityType.EVERYTHING_CASE_SENSITIVE,
        newPrincipal.getCaseSensitivityType());
    assertEquals(principal.getName(), newPrincipal.getName());
    assertFalse(newPrincipal.getName().contains(newUserDomain));
  }

  public void testAclFilterWithNoFilterChanges() throws Exception {
    Document input = createDocument("Jane Doe", "John Doe");

    AclPropertyFilter factory = new AclPropertyFilter();
    Document output = factory.newDocumentFilter(input);

    Property prop = output.findProperty(SpiConstants.PROPNAME_ACLUSERS);
    Value value = prop.nextValue();
    Principal newPrincipal = ((PrincipalValue) value).getPrincipal();
    assertEquals(CaseSensitivityType.EVERYTHING_CASE_SENSITIVE,
        newPrincipal.getCaseSensitivityType());
    assertEquals("Jane Doe", newPrincipal.getName());

    Property denyprop =
        output.findProperty(SpiConstants.PROPNAME_ACLDENYUSERS);
    Value denyvalue = denyprop.nextValue();
    Principal denyPrincipal = ((PrincipalValue) denyvalue).getPrincipal();
    assertEquals(CaseSensitivityType.EVERYTHING_CASE_SENSITIVE,
        denyPrincipal.getCaseSensitivityType());
    assertEquals("John Doe", denyPrincipal.getName());
  }

  public void assertValues(Principal principal, String userName, String domain,
      boolean changeDomain) {
    assertEquals(CaseSensitivityType.EVERYTHING_CASE_SENSITIVE,
        principal.getCaseSensitivityType());
    assertEquals(userName, principal.getName());
    if (changeDomain) {
      assertTrue(principal.getName().contains(domain));
    } else {
      assertFalse(principal.getName().contains(domain));
    }
  }

  public void addPrincipalToDocument(Map<String, Object> props, String key,
      String name) {
    Principal principal =
        new Principal(SpiConstants.PrincipalType.UNKNOWN, null, name,
            SpiConstants.CaseSensitivityType.EVERYTHING_CASE_SENSITIVE);
    props.put(key, principal);
  }

  public void testAclFilterForGroupDomainChange() throws Exception {
    Map<String, Object> props =
        ConnectorTestUtils.createSimpleDocumentBasicProperties("testDocId");

    addPrincipalToDocument(props, SpiConstants.PROPNAME_ACLUSERS,
        "noCompany\\John Doe");
    addPrincipalToDocument(props, SpiConstants.PROPNAME_ACLDENYUSERS,
        "anyCompany\\Jane Doe");
    addPrincipalToDocument(props, SpiConstants.PROPNAME_ACLGROUPS,
        "noCompany\\Sales");
    addPrincipalToDocument(props, SpiConstants.PROPNAME_ACLDENYGROUPS,
        "anyCompany\\Testing");

    Document input = ConnectorTestUtils.createSimpleDocument(props);

    String newUserDomain = "MyCompany";
    Document output = createFilter(input,
        CaseSensitivityType.EVERYTHING_CASE_SENSITIVE, newUserDomain, true);

    Principal newPrincipal = getPrincipal(output,
        SpiConstants.PROPNAME_ACLUSERS);
    assertValues(newPrincipal, "MyCompany\\John Doe", newUserDomain, true);

    Principal newDenyPrincipal = getPrincipal(output,
        SpiConstants.PROPNAME_ACLDENYUSERS);
    assertValues(newDenyPrincipal, "MyCompany\\Jane Doe", newUserDomain, true);

    Principal newGroupPrincipal = getPrincipal(output,
        SpiConstants.PROPNAME_ACLGROUPS);
    assertValues(newGroupPrincipal, "noCompany\\Sales", newUserDomain, false);

    Principal groupDenyPrincipal = getPrincipal(output,
        SpiConstants.PROPNAME_ACLDENYGROUPS);
    assertValues(groupDenyPrincipal, "anyCompany\\Testing",
        newUserDomain, false);
  }
}
TOP

Related Classes of com.google.enterprise.connector.util.filter.AclpropertyFilterTest

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.