Package com.sun.jna.platform.win32

Source Code of com.sun.jna.platform.win32.Advapi32UtilTest

/* Copyright (c) 2010 Daniel Doubrovkine, All Rights Reserved
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
* Lesser General Public License for more details. 
*/
package com.sun.jna.platform.win32;

import java.util.Map;
import java.util.TreeMap;

import junit.framework.TestCase;

import com.sun.jna.WString;
import com.sun.jna.platform.win32.Advapi32Util.Account;
import com.sun.jna.platform.win32.Advapi32Util.EventLogIterator;
import com.sun.jna.platform.win32.Advapi32Util.EventLogRecord;
import com.sun.jna.platform.win32.LMAccess.USER_INFO_1;
import com.sun.jna.platform.win32.WinNT.HANDLEByReference;
import com.sun.jna.platform.win32.WinNT.PSID;
import com.sun.jna.platform.win32.WinNT.SID_NAME_USE;
import com.sun.jna.platform.win32.WinNT.WELL_KNOWN_SID_TYPE;

/**
* @author dblock[at]dblock[dot]org
*/
public class Advapi32UtilTest extends TestCase {

    public static void main(String[] args) {
        junit.textui.TestRunner.run(Advapi32UtilTest.class);
        String currentUserName = Advapi32Util.getUserName();
        System.out.println("GetUserName: " + currentUserName);
   
        for(Account group : Advapi32Util.getCurrentUserGroups()) {
      System.out.println(" " + group.fqn + " [" + group.sidString + "]");
    }
   
    Account accountByName = Advapi32Util.getAccountByName(currentUserName);
    System.out.println("AccountByName: " + currentUserName);
        System.out.println(" Fqn: " + accountByName.fqn);
        System.out.println(" Domain: " + accountByName.domain);
        System.out.println(" Sid: " + accountByName.sidString);
       
        Account accountBySid = Advapi32Util.getAccountBySid(new PSID(accountByName.sid));
    System.out.println("AccountBySid: " + accountByName.sidString);
        System.out.println(" Fqn: " + accountBySid.fqn);
        System.out.println(" Name: " + accountBySid.name);
        System.out.println(" Domain: " + accountBySid.domain);
    }
   
  public void testGetUsername() {
    String username = Advapi32Util.getUserName();
    assertTrue(username.length() > 0);
  }
 
  public void testGetAccountBySid() {   
    String accountName = Advapi32Util.getUserName();
    Account currentUser = Advapi32Util.getAccountByName(accountName);
    Account account = Advapi32Util.getAccountBySid(new PSID(currentUser.sid));
    assertEquals(SID_NAME_USE.SidTypeUser, account.accountType);
    assertEquals(currentUser.fqn.toLowerCase(), account.fqn.toLowerCase());
    assertEquals(currentUser.name.toLowerCase(), account.name.toLowerCase());
    assertEquals(currentUser.domain.toLowerCase(), account.domain.toLowerCase());
    assertEquals(currentUser.sidString, account.sidString);   
  }

  public void testGetAccountByName() {   
    String accountName = Advapi32Util.getUserName();
    Account account = Advapi32Util.getAccountByName(accountName);
    assertEquals(SID_NAME_USE.SidTypeUser, account.accountType);
  }
 
  public void testGetAccountNameFromSid() {
        assertEquals("Everyone", Advapi32Util.getAccountBySid("S-1-1-0").name);   
  }

  public void testGetAccountSidFromName() {
        assertEquals("S-1-1-0", Advapi32Util.getAccountByName("Everyone").sidString);
  }
 
  public void testConvertSid() {
      String sidString = "S-1-1-0"; // Everyone
      byte[] sidBytes = Advapi32Util.convertStringSidToSid(sidString);
      assertTrue(sidBytes.length > 0);
      String convertedSidString = Advapi32Util.convertSidToStringSid(new PSID(sidBytes));
      assertEquals(convertedSidString, sidString);
  }
 
  public void testGetCurrentUserGroups() {
    Account[] groups = Advapi32Util.getCurrentUserGroups();
    assertTrue(groups.length > 0);
    for(Account group : groups) {
      assertTrue(group.name.length() > 0);
      assertTrue(group.sidString.length() > 0);
      assertTrue(group.sid.length > 0);
    }
  }
 
  public void testGetUserGroups() {
      USER_INFO_1 userInfo = new USER_INFO_1();
      userInfo.usri1_name = new WString("JNANetapi32TestUser");
      userInfo.usri1_password = new WString("!JNAP$$Wrd0");
      userInfo.usri1_priv = LMAccess.USER_PRIV_USER;
    try {
        assertEquals(LMErr.NERR_Success, Netapi32.INSTANCE.NetUserAdd(
            null, 1, userInfo, null));
      HANDLEByReference phUser = new HANDLEByReference();
      try {
        assertTrue(Advapi32.INSTANCE.LogonUser(userInfo.usri1_name.toString(),
            null, userInfo.usri1_password.toString(), WinBase.LOGON32_LOGON_NETWORK,
            WinBase.LOGON32_PROVIDER_DEFAULT, phUser));
        Account[] groups = Advapi32Util.getTokenGroups(phUser.getValue());
        assertTrue(groups.length > 0);
        for(Account group : groups) {
          assertTrue(group.name.length() > 0);
          assertTrue(group.sidString.length() > 0);
          assertTrue(group.sid.length > 0);
        }
      } finally {
        if (phUser.getValue() != WinBase.INVALID_HANDLE_VALUE) {
          Kernel32.INSTANCE.CloseHandle(phUser.getValue());
        }       
      }
    } finally {
        assertEquals(LMErr.NERR_Success, Netapi32.INSTANCE.NetUserDel(
            null, userInfo.usri1_name.toString()));     
    }
  }
 
  public void testGetUserAccount() {
      USER_INFO_1 userInfo = new USER_INFO_1();
      userInfo.usri1_name = new WString("JNANetapi32TestUser");
      userInfo.usri1_password = new WString("!JNAP$$Wrd0");
      userInfo.usri1_priv = LMAccess.USER_PRIV_USER;
    try {
        assertEquals(LMErr.NERR_Success, Netapi32.INSTANCE.NetUserAdd(
            null, 1, userInfo, null));
      HANDLEByReference phUser = new HANDLEByReference();
      try {
        assertTrue(Advapi32.INSTANCE.LogonUser(userInfo.usri1_name.toString(),
            null, userInfo.usri1_password.toString(), WinBase.LOGON32_LOGON_NETWORK,
            WinBase.LOGON32_PROVIDER_DEFAULT, phUser));
        Advapi32Util.Account account = Advapi32Util.getTokenAccount(phUser.getValue());
        assertTrue(account.name.length() > 0);
        assertEquals(userInfo.usri1_name.toString(), account.name);
      } finally {
        if (phUser.getValue() != WinBase.INVALID_HANDLE_VALUE) {
          Kernel32.INSTANCE.CloseHandle(phUser.getValue());
        }
      }
    } finally {
        assertEquals(LMErr.NERR_Success, Netapi32.INSTANCE.NetUserDel(
            null, userInfo.usri1_name.toString()));     
    }
  } 
 
  public void testRegistryKeyExists() {
    assertTrue(Advapi32Util.registryKeyExists(WinReg.HKEY_LOCAL_MACHINE,
        ""));
    assertTrue(Advapi32Util.registryKeyExists(WinReg.HKEY_LOCAL_MACHINE,
        "Software\\Microsoft"));
    assertFalse(Advapi32Util.registryKeyExists(WinReg.HKEY_LOCAL_MACHINE,
        "KeyDoesNotExist\\SubKeyDoesNotExist"));
  }
 
  public void testRegistryValueExists() {
    assertFalse(Advapi32Util.registryValueExists(WinReg.HKEY_LOCAL_MACHINE,
        "Software\\Microsoft", ""));
    assertFalse(Advapi32Util.registryValueExists(WinReg.HKEY_LOCAL_MACHINE,
        "Software\\Microsoft", "KeyDoesNotExist"));
    assertTrue(Advapi32Util.registryValueExists(WinReg.HKEY_LOCAL_MACHINE,
        "SYSTEM\\CurrentControlSet\\Control", "SystemBootDevice"));
 
 
  public void testRegistryCreateDeleteKey() {
    Advapi32Util.registryCreateKey(WinReg.HKEY_CURRENT_USER, "Software", "JNA");
    assertTrue(Advapi32Util.registryKeyExists(WinReg.HKEY_CURRENT_USER, "Software\\JNA"));
    Advapi32Util.registryDeleteKey(WinReg.HKEY_CURRENT_USER, "Software", "JNA");
    assertFalse(Advapi32Util.registryKeyExists(WinReg.HKEY_CURRENT_USER, "Software\\JNA"));
  }
 
  public void testRegistryCreateKeyDisposition() {
    Advapi32Util.registryCreateKey(WinReg.HKEY_CURRENT_USER, "Software", "JNA");
    Advapi32Util.registryDeleteKey(WinReg.HKEY_CURRENT_USER, "Software", "JNA");
    assertTrue(Advapi32Util.registryCreateKey(WinReg.HKEY_CURRENT_USER, "Software", "JNA"));
    assertFalse(Advapi32Util.registryCreateKey(WinReg.HKEY_CURRENT_USER, "Software", "JNA"));
    assertTrue(Advapi32Util.registryKeyExists(WinReg.HKEY_CURRENT_USER, "Software\\JNA"));
    Advapi32Util.registryDeleteKey(WinReg.HKEY_CURRENT_USER, "Software", "JNA");
  }

  public void testRegistryDeleteValue() {
    Advapi32Util.registryCreateKey(WinReg.HKEY_CURRENT_USER, "Software", "JNA");
    Advapi32Util.registrySetIntValue(WinReg.HKEY_CURRENT_USER, "Software\\JNA", "IntValue", 42);
    assertTrue(Advapi32Util.registryValueExists(WinReg.HKEY_CURRENT_USER, "Software\\JNA", "IntValue"));
    Advapi32Util.registryDeleteValue(WinReg.HKEY_CURRENT_USER, "Software\\JNA", "IntValue");   
    assertFalse(Advapi32Util.registryValueExists(WinReg.HKEY_CURRENT_USER, "Software\\JNA", "IntValue"));
    Advapi32Util.registryDeleteKey(WinReg.HKEY_CURRENT_USER, "Software", "JNA");
  }
 
  public void testRegistrySetGetIntValue() {
    Advapi32Util.registryCreateKey(WinReg.HKEY_CURRENT_USER, "Software", "JNA");
    Advapi32Util.registrySetIntValue(WinReg.HKEY_CURRENT_USER, "Software\\JNA", "IntValue", 42);
    assertEquals(42, Advapi32Util.registryGetIntValue(WinReg.HKEY_CURRENT_USER,
        "Software\\JNA", "IntValue"));
    assertTrue(Advapi32Util.registryValueExists(WinReg.HKEY_CURRENT_USER, "Software\\JNA", "IntValue"));
    Advapi32Util.registryDeleteKey(WinReg.HKEY_CURRENT_USER, "Software", "JNA");
  }
 
  public void testRegistrySetGetStringValue() {
    Advapi32Util.registryCreateKey(WinReg.HKEY_CURRENT_USER, "Software", "JNA");
    Advapi32Util.registrySetStringValue(WinReg.HKEY_CURRENT_USER, "Software\\JNA", "StringValue", "Hello World");
    assertEquals("Hello World", Advapi32Util.registryGetStringValue(WinReg.HKEY_CURRENT_USER,
        "Software\\JNA", "StringValue"));
    assertTrue(Advapi32Util.registryValueExists(WinReg.HKEY_CURRENT_USER, "Software\\JNA", "StringValue"));
    Advapi32Util.registryDeleteKey(WinReg.HKEY_CURRENT_USER, "Software", "JNA");   
  }

  public void testRegistrySetGetExpandableStringValue() {
    Advapi32Util.registryCreateKey(WinReg.HKEY_CURRENT_USER, "Software", "JNA");
    Advapi32Util.registrySetExpandableStringValue(WinReg.HKEY_CURRENT_USER, "Software\\JNA", "StringValue", "Temp is %TEMP%");
    assertEquals("Temp is %TEMP%", Advapi32Util.registryGetExpandableStringValue(WinReg.HKEY_CURRENT_USER,
        "Software\\JNA", "StringValue"));
    assertTrue(Advapi32Util.registryValueExists(WinReg.HKEY_CURRENT_USER, "Software\\JNA", "StringValue"));
    Advapi32Util.registryDeleteKey(WinReg.HKEY_CURRENT_USER, "Software", "JNA");   
  }
 
  public void testRegistrySetGetStringArray() {
    Advapi32Util.registryCreateKey(WinReg.HKEY_CURRENT_USER, "Software", "JNA");
    String[] dataWritten = { "Hello", "World" };
    Advapi32Util.registrySetStringArray(WinReg.HKEY_CURRENT_USER, "Software\\JNA", "MultiStringValue", dataWritten);
    assertTrue(Advapi32Util.registryValueExists(WinReg.HKEY_CURRENT_USER, "Software\\JNA", "MultiStringValue"));
    String[] dataRead = Advapi32Util.registryGetStringArray(WinReg.HKEY_CURRENT_USER, "Software\\JNA", "MultiStringValue");
    assertEquals(dataWritten.length, dataRead.length);
    for(int i = 0; i < dataRead.length; i++) {
      assertEquals(dataWritten[i], dataRead[i]);
    }
    Advapi32Util.registryDeleteKey(WinReg.HKEY_CURRENT_USER, "Software", "JNA");   
  }
 
  public void testRegistrySetGetBinaryValue() {
    byte[] data = { 0x00, 0x01, 0x02 };
    Advapi32Util.registryCreateKey(WinReg.HKEY_CURRENT_USER, "Software", "JNA");
    Advapi32Util.registrySetBinaryValue(WinReg.HKEY_CURRENT_USER, "Software\\JNA", "BinaryValue", data);
    byte[] read = Advapi32Util.registryGetBinaryValue(WinReg.HKEY_CURRENT_USER, "Software\\JNA", "BinaryValue");
    assertEquals(data.length, read.length);   
    for(int i = 0; i < data.length; i++) {
      assertEquals(data[i], read[i]);
    }
    assertTrue(Advapi32Util.registryValueExists(WinReg.HKEY_CURRENT_USER, "Software\\JNA", "BinaryValue"));
    Advapi32Util.registryDeleteKey(WinReg.HKEY_CURRENT_USER, "Software", "JNA");
  }
 
  public void testRegistryGetKeys() {
    Advapi32Util.registryCreateKey(WinReg.HKEY_CURRENT_USER, "Software", "JNA");
    Advapi32Util.registryCreateKey(WinReg.HKEY_CURRENT_USER, "Software\\JNA", "Key1");
    Advapi32Util.registryCreateKey(WinReg.HKEY_CURRENT_USER, "Software\\JNA", "Key2");
    String[] subKeys = Advapi32Util.registryGetKeys(WinReg.HKEY_CURRENT_USER, "Software\\JNA");
    assertEquals(2, subKeys.length);
    assertEquals(subKeys[0], "Key1");
    assertEquals(subKeys[1], "Key2");
    Advapi32Util.registryDeleteKey(WinReg.HKEY_CURRENT_USER, "Software\\JNA", "Key1");
    Advapi32Util.registryDeleteKey(WinReg.HKEY_CURRENT_USER, "Software\\JNA", "Key2");
    Advapi32Util.registryDeleteKey(WinReg.HKEY_CURRENT_USER, "Software", "JNA");       
  }
 
  public void testRegistryGetValues() {
    String uu = new String("A" + "\u00ea" + "\u00f1" + "\u00fc" + "C");
    Advapi32Util.registryCreateKey(WinReg.HKEY_CURRENT_USER, "Software", "JNA");
    Advapi32Util.registrySetIntValue(WinReg.HKEY_CURRENT_USER, "Software\\JNA", "FourtyTwo" + uu, 42);
    Advapi32Util.registrySetStringValue(WinReg.HKEY_CURRENT_USER, "Software\\JNA", "42" + uu, "FourtyTwo" + uu);
    Advapi32Util.registrySetExpandableStringValue(WinReg.HKEY_CURRENT_USER, "Software\\JNA", "ExpandableString", "%TEMP%");
    byte[] dataWritten = { 0xD, 0xE, 0xA, 0xD, 0xB, 0xE, 0xE, 0xF };   
    Advapi32Util.registrySetBinaryValue(WinReg.HKEY_CURRENT_USER, "Software\\JNA", "DeadBeef", dataWritten);
    String[] stringsWritten = { "Hello", "World", "Hello World", uu };
    Advapi32Util.registrySetStringArray(WinReg.HKEY_CURRENT_USER, "Software\\JNA", "StringArray", stringsWritten);   
    TreeMap<String, Object> values = Advapi32Util.registryGetValues(WinReg.HKEY_CURRENT_USER, "Software\\JNA");
    assertEquals(5, values.keySet().size());
    assertEquals("FourtyTwo" + uu, values.get("42" + uu));
    assertEquals(42, values.get("FourtyTwo" + uu));
    assertEquals("%TEMP%", values.get("ExpandableString"));
    byte[] dataRead = (byte[]) values.get("DeadBeef");
    assertEquals(dataWritten.length, dataRead.length);
    for(int i = 0; i < dataWritten.length; i++) {
      assertEquals(dataWritten[i], dataRead[i]);
    }
    String[] stringsRead = (String[]) values.get("StringArray");
    assertEquals(stringsWritten.length, stringsRead.length);
    for(int i = 0; i < stringsWritten.length; i++) {
      assertEquals(stringsWritten[i], stringsRead[i]);
    }
    Advapi32Util.registryDeleteKey(WinReg.HKEY_CURRENT_USER, "Software", "JNA");           
  }
 
  public void testIsWellKnownSid() {   
    String everyoneString = "S-1-1-0";
        assertTrue(Advapi32Util.isWellKnownSid(everyoneString, WELL_KNOWN_SID_TYPE.WinWorldSid));   
        assertFalse(Advapi32Util.isWellKnownSid(everyoneString, WELL_KNOWN_SID_TYPE.WinAccountAdministratorSid));
        byte[] everyoneBytes = Advapi32Util.convertStringSidToSid(everyoneString);
        assertTrue(Advapi32Util.isWellKnownSid(everyoneBytes, WELL_KNOWN_SID_TYPE.WinWorldSid));   
        assertFalse(Advapi32Util.isWellKnownSid(everyoneBytes, WELL_KNOWN_SID_TYPE.WinAccountAdministratorSid));
  }
 
  public void testEventLogIteratorForwards() {
    EventLogIterator iter = new EventLogIterator("Application");
    try {
      int max = 100;
      int lastId = 0;
      while(iter.hasNext()) {
        EventLogRecord record = iter.next();
        assertTrue(record.getRecordNumber() > lastId);
        lastId = record.getRecordNumber();
        assertNotNull(record.getType().name());
        assertNotNull(record.getSource());
        if (record.getRecord().DataLength.intValue() > 0) {
          assertEquals(record.getData().length,
              record.getRecord().DataLength.intValue());
        } else {
          assertNull(record.getData());
        }
        if (record.getRecord().NumStrings.intValue() > 0) {
          assertEquals(record.getStrings().length,
              record.getRecord().NumStrings.intValue());
        } else {
          assertNull(record.getStrings());
        }
       
        if (max-- <= 0) {
          break; // shorten test
        }
        /*
        System.out.println(record.getRecordNumber()
            + ": Event ID: " + record.getEventId()
            + ", Event Type: " + record.getType()
            + ", Event Source: " + record.getSource());
            */
      }
    } finally {
      iter.close();
    }
  }
 
  public void testEventLogIteratorBackwards() {
    EventLogIterator iter = new EventLogIterator(null,
        "Application", WinNT.EVENTLOG_BACKWARDS_READ);
    try {
      int max = 100;
      int lastId = -1;
      while(iter.hasNext()) {
        EventLogRecord record = iter.next();
        /*
        System.out.println(record.getRecordNumber()
            + ": Event ID: " + record.getEventId()
            + ", Event Type: " + record.getType()
            + ", Event Source: " + record.getSource());
            */
        assertTrue(record.getRecordNumber() < lastId || lastId == -1);
        lastId = record.getRecordNumber();
        if (max-- <= 0) {
          break; // shorten test
        }
      }
    } finally {
      iter.close();
    }
  }
 
  public void testGetEnvironmentBlock() {
    String expected = "KEY=value\0"
      + "KEY_EMPTY=\0"
      + "KEY_NUMBER=2\0"
      + "\0";
   
    // Order is important to kept checking result simple
    Map<String, String> mockEnvironment = new TreeMap<String, String>();
    mockEnvironment.put("KEY", "value");
    mockEnvironment.put("KEY_EMPTY", "");
    mockEnvironment.put("KEY_NUMBER", "2");
    mockEnvironment.put("KEY_NULL", null);   
   
    String block = Advapi32Util.getEnvironmentBlock(mockEnvironment);
    assertEquals(expected, block);
  }
}
TOP

Related Classes of com.sun.jna.platform.win32.Advapi32UtilTest

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.