Home | History | Annotate | Download | only in admin
      1 /*
      2  * Copyright (C) 2016 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License
     15  */
     16 
     17 package android.app.admin;
     18 
     19 import static org.junit.Assert.assertEquals;
     20 import static org.junit.Assert.assertNotEquals;
     21 
     22 import android.os.Parcel;
     23 import android.support.test.filters.SmallTest;
     24 import android.support.test.runner.AndroidJUnit4;
     25 
     26 import org.junit.Test;
     27 import org.junit.runner.RunWith;
     28 
     29 /** Unit tests for {@link PasswordMetrics}. */
     30 @RunWith(AndroidJUnit4.class)
     31 @SmallTest
     32 public class PasswordMetricsTest {
     33 
     34     @Test
     35     public void testIsDefault() {
     36         final PasswordMetrics metrics = new PasswordMetrics();
     37         assertEquals(DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED, metrics.quality);
     38         assertEquals(0, metrics.length);
     39         assertEquals(0, metrics.letters);
     40         assertEquals(0, metrics.upperCase);
     41         assertEquals(0, metrics.lowerCase);
     42         assertEquals(0, metrics.numeric);
     43         assertEquals(0, metrics.symbols);
     44         assertEquals(0, metrics.nonLetter);
     45     }
     46 
     47     @Test
     48     public void testParceling() {
     49         final int quality = 0;
     50         final int length = 1;
     51         final int letters = 2;
     52         final int upperCase = 3;
     53         final int lowerCase = 4;
     54         final int numeric = 5;
     55         final int symbols = 6;
     56         final int nonLetter = 7;
     57 
     58         final Parcel parcel = Parcel.obtain();
     59         final PasswordMetrics metrics;
     60         try {
     61             new PasswordMetrics(
     62                     quality, length, letters, upperCase, lowerCase, numeric, symbols, nonLetter)
     63                     .writeToParcel(parcel, 0);
     64             parcel.setDataPosition(0);
     65             metrics = PasswordMetrics.CREATOR.createFromParcel(parcel);
     66         } finally {
     67             parcel.recycle();
     68         }
     69 
     70         assertEquals(quality, metrics.quality);
     71         assertEquals(length, metrics.length);
     72         assertEquals(letters, metrics.letters);
     73         assertEquals(upperCase, metrics.upperCase);
     74         assertEquals(lowerCase, metrics.lowerCase);
     75         assertEquals(numeric, metrics.numeric);
     76         assertEquals(symbols, metrics.symbols);
     77         assertEquals(nonLetter, metrics.nonLetter);
     78 
     79     }
     80 
     81     @Test
     82     public void testComputeForPassword_metrics() {
     83         final PasswordMetrics metrics = PasswordMetrics.computeForPassword("6B~0z1Z3*8A");
     84         assertEquals(11, metrics.length);
     85         assertEquals(4, metrics.letters);
     86         assertEquals(3, metrics.upperCase);
     87         assertEquals(1, metrics.lowerCase);
     88         assertEquals(5, metrics.numeric);
     89         assertEquals(2, metrics.symbols);
     90         assertEquals(7, metrics.nonLetter);
     91     }
     92 
     93     @Test
     94     public void testComputeForPassword_quality() {
     95         assertEquals(DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC,
     96                 PasswordMetrics.computeForPassword("a1").quality);
     97         assertEquals(DevicePolicyManager.PASSWORD_QUALITY_ALPHABETIC,
     98                 PasswordMetrics.computeForPassword("a").quality);
     99         assertEquals(DevicePolicyManager.PASSWORD_QUALITY_ALPHABETIC,
    100                 PasswordMetrics.computeForPassword("*~&%$").quality);
    101         assertEquals(DevicePolicyManager.PASSWORD_QUALITY_NUMERIC_COMPLEX,
    102                 PasswordMetrics.computeForPassword("1").quality);
    103         // contains a long sequence so isn't complex
    104         assertEquals(DevicePolicyManager.PASSWORD_QUALITY_NUMERIC,
    105                 PasswordMetrics.computeForPassword("1234").quality);
    106         assertEquals(DevicePolicyManager.PASSWORD_QUALITY_UNSPECIFIED,
    107                 PasswordMetrics.computeForPassword("").quality);
    108     }
    109 
    110     @Test
    111     public void testMaxLengthSequence() {
    112         assertEquals(4, PasswordMetrics.maxLengthSequence("1234"));
    113         assertEquals(5, PasswordMetrics.maxLengthSequence("13579"));
    114         assertEquals(4, PasswordMetrics.maxLengthSequence("1234abd"));
    115         assertEquals(3, PasswordMetrics.maxLengthSequence("aabc"));
    116         assertEquals(1, PasswordMetrics.maxLengthSequence("qwertyuio"));
    117         assertEquals(3, PasswordMetrics.maxLengthSequence("@ABC"));
    118         // anything that repeats
    119         assertEquals(4, PasswordMetrics.maxLengthSequence(";;;;"));
    120         // ordered, but not composed of alphas or digits
    121         assertEquals(1, PasswordMetrics.maxLengthSequence(":;<=>"));
    122     }
    123 
    124     @Test
    125     public void testEquals() {
    126         PasswordMetrics metrics0 = new PasswordMetrics();
    127         PasswordMetrics metrics1 = new PasswordMetrics();
    128         assertNotEquals(metrics0, null);
    129         assertNotEquals(metrics0, new Object());
    130         assertEquals(metrics0, metrics0);
    131         assertEquals(metrics0, metrics1);
    132 
    133         assertEquals(new PasswordMetrics(DevicePolicyManager.PASSWORD_QUALITY_SOMETHING, 4),
    134                 new PasswordMetrics(DevicePolicyManager.PASSWORD_QUALITY_SOMETHING, 4));
    135 
    136         assertNotEquals(new PasswordMetrics(DevicePolicyManager.PASSWORD_QUALITY_SOMETHING, 4),
    137                 new PasswordMetrics(DevicePolicyManager.PASSWORD_QUALITY_SOMETHING, 5));
    138 
    139         assertNotEquals(new PasswordMetrics(DevicePolicyManager.PASSWORD_QUALITY_SOMETHING, 4),
    140                 new PasswordMetrics(DevicePolicyManager.PASSWORD_QUALITY_COMPLEX, 4));
    141 
    142         metrics0 = PasswordMetrics.computeForPassword("1234abcd,./");
    143         metrics1 = PasswordMetrics.computeForPassword("1234abcd,./");
    144         assertEquals(metrics0, metrics1);
    145         metrics1.letters++;
    146         assertNotEquals(metrics0, metrics1);
    147         metrics1.letters--;
    148         metrics1.upperCase++;
    149         assertNotEquals(metrics0, metrics1);
    150         metrics1.upperCase--;
    151         metrics1.lowerCase++;
    152         assertNotEquals(metrics0, metrics1);
    153         metrics1.lowerCase--;
    154         metrics1.numeric++;
    155         assertNotEquals(metrics0, metrics1);
    156         metrics1.numeric--;
    157         metrics1.symbols++;
    158         assertNotEquals(metrics0, metrics1);
    159         metrics1.symbols--;
    160         metrics1.nonLetter++;
    161         assertNotEquals(metrics0, metrics1);
    162         metrics1.nonLetter--;
    163         assertEquals(metrics0, metrics1);
    164 
    165 
    166     }
    167 }
    168