### Question:
Acl { public static PrincipalType getPrincipalType(Principal p) { checkNotNull(p, "Principal can not be null"); boolean isGSuitePrincipal = Objects.nonNull(p.getGsuitePrincipal()); boolean isGSuiteUser = isGSuitePrincipal && !Strings.isNullOrEmpty(p.getGsuitePrincipal().getGsuiteUserEmail()); boolean isGSuiteGroup = isGSuitePrincipal && !Strings.isNullOrEmpty(p.getGsuitePrincipal().getGsuiteGroupEmail()); boolean isGSuiteDomain = isGSuitePrincipal && Objects.nonNull(p.getGsuitePrincipal().getGsuiteDomain()) && p.getGsuitePrincipal().getGsuiteDomain(); boolean isUserPrincipal = !Strings.isNullOrEmpty(p.getUserResourceName()); boolean isGroupPrincipal = !Strings.isNullOrEmpty(p.getGroupResourceName()); if (isGSuitePrincipal) { checkArgument(!isUserPrincipal && !isGroupPrincipal, "Invalid principal"); if (isGSuiteGroup) { checkArgument(!isGSuiteDomain && !isGSuiteUser, "Invalid principal"); return PrincipalType.GSUITE_GROUP; } else if (isGSuiteUser) { checkArgument(!isGSuiteDomain, "Invalid principal"); return PrincipalType.GSUITE_USER; } else { checkArgument(isGSuiteDomain, "Invalid principal"); return PrincipalType.GSUITE_DOMAIN; } } else if (isUserPrincipal) { checkArgument(!isGroupPrincipal, "Invalid principal"); return PrincipalType.USER; } else { checkArgument(isGroupPrincipal, "Invalid principal"); return PrincipalType.GROUP; } } private  Acl(Builder builder); Set<Principal> getReaders(); Set<Principal> getDeniedReaders(); Set<Principal> getOwners(); String getInheritFrom(); String getInheritFromFragment(); InheritanceType getInheritanceType(); Item createFragmentItemOf(String id, String fragment); Item applyTo(Item item); static String fragmentId(String id, String fragment); static String getPrincipalName(String name, String namespace); static Principal getGoogleUserPrincipal(String userId); static Principal getGoogleGroupPrincipal(String groupId); static Principal getCustomerPrincipal(); static Principal getUserPrincipal(String userId); static Principal getUserPrincipal(String userId, String identitySourceId); static Principal getGroupPrincipal(String groupId); static Principal getGroupPrincipal(String groupId, String identitySourceId); static boolean addResourcePrefixUser(Principal user, String identitySourceId); static boolean addResourcePrefixGroup(Principal group, String identitySourceId); static PrincipalType getPrincipalType(Principal p); static Acl createAcl(String permittedUsers, String permittedGroups, String deniedUsers,
      String deniedGroups); @Override int hashCode(); @Override boolean equals(Object obj); @Override String toString(); static final String IDENTITY_SOURCES_PREFIX; static final String IDENTITY_RESOURCE_NAME_FORMAT; static final String USER_RESOURCE_NAME_FORMAT; static final String GROUP_NAME_FORMAT; static final UserPrincipalParser USER_PARSER; static final GroupPrincipalParser GROUP_PARSER; static final String GOOGLE_ACCOUNT_PREFIX; }### Answer:
@Test public void getPrincipalType_emptyPrincipal() { Principal principal = new Principal(); thrown.expect(IllegalArgumentException.class); thrown.expectMessage("Invalid principal"); Acl.getPrincipalType(principal); }
@Test public void getPrincipalType_emptyGSuitePrincipal() { Principal principal = new Principal().setGsuitePrincipal(new GSuitePrincipal()); thrown.expect(IllegalArgumentException.class); thrown.expectMessage("Invalid principal"); Acl.getPrincipalType(principal); }