Package org.syncany.tests.config

Source Code of org.syncany.tests.config.ConfigTest

/*
* Syncany, www.syncany.org
* Copyright (C) 2011-2014 Philipp C. Heckel <philipp.heckel@gmail.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/
package org.syncany.tests.config;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.fail;

import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;

import javax.crypto.spec.SecretKeySpec;

import org.junit.Ignore;
import org.junit.Test;
import org.syncany.config.Config;
import org.syncany.config.ConfigException;
import org.syncany.config.to.ConfigTO;
import org.syncany.config.to.RepoTO;
import org.syncany.config.to.RepoTO.TransformerTO;
import org.syncany.crypto.SaltedSecretKey;
import org.syncany.tests.util.TestAssertUtil;
import org.syncany.tests.util.TestConfigUtil;
import org.syncany.util.StringUtil;

public class ConfigTest {
  @Test
  public void testConfigValid() throws Exception {
    // Setup
    File localDir = new File("/some/folder");
    ConfigTO configTO = new ConfigTO();
    RepoTO repoTO = new RepoTO();
   
    configTO.setMachineName("somevalidmachinename"); // <<< valid
   
    repoTO.setChunkerTO(TestConfigUtil.createFixedChunkerTO()); // <<< valid
    repoTO.setMultiChunker(TestConfigUtil.createZipMultiChunkerTO()); // <<< valid
    repoTO.setRepoId(new byte[] { 0x01, 0x02 }); // <<< valid
    repoTO.setTransformers(null); // <<< valid   
   
    // Run!
    Config config = new Config(localDir, configTO, repoTO);
   
    // Test
    assertEquals("/some/folder/.syncany", config.getAppDir().getAbsolutePath());
    assertEquals("/some/folder/.syncany/cache", config.getCacheDir().getAbsolutePath());
    assertEquals("/some/folder/.syncany/db", config.getDatabaseDir().getAbsolutePath());
    assertEquals("/some/folder/.syncany/db/local.db", config.getDatabaseFile().getAbsolutePath());

    assertNotNull(config.getChunker());
    assertEquals("FixedChunker", config.getChunker().getClass().getSimpleName());
    assertEquals("SHA1", config.getChunker().getChecksumAlgorithm());
   
    assertNotNull(config.getMultiChunker());
    assertEquals("ZipMultiChunker", config.getMultiChunker().getClass().getSimpleName());

    assertNotNull(config.getTransformer());
    assertEquals("NoTransformer", config.getTransformer().getClass().getSimpleName());
   
    assertNotNull(config.getCache());
  }
 
  @Test(expected = ConfigException.class)
  public void testConfigInitLocalDirNull() throws Exception {
    File localDir = null;
    ConfigTO configTO = new ConfigTO();
    RepoTO repoTO = new RepoTO();
   
    new Config(localDir, configTO, repoTO);     
  }
 
  @Test(expected = ConfigException.class)
  public void testConfigInitConfigTONull() throws Exception {
    File localDir = new File("/some/folder");
    ConfigTO configTO = null;
    RepoTO repoTO = new RepoTO();
   
    new Config(localDir, configTO, repoTO);     
  }
 
  @Test(expected = ConfigException.class)
  public void testConfigInitRepoTONull() throws Exception {
    File localDir = new File("/some/folder");
    ConfigTO configTO = new ConfigTO();
    RepoTO repoTO = null;
   
    new Config(localDir, configTO, repoTO);     
  }
 
  @Test
  public void testConfigMachineNameInvalidChars() throws Exception {
    File localDir = new File("/some/folder");
    ConfigTO configTO = new ConfigTO();
    RepoTO repoTO = new RepoTO();
   
    configTO.setMachineName("invalid machine name");
   
    // Run!
    try {
      new Config(localDir, configTO, repoTO);
      fail("Machine name should not have been accepted.");
    }
    catch (ConfigException e) { 
      TestAssertUtil.assertErrorStackTraceContains("Machine name", e);     
    }     
  }
 
  @Test
  public void testConfigMachineNameInvalidNull() throws Exception {
    File localDir = new File("/some/folder");
    ConfigTO configTO = new ConfigTO();
    RepoTO repoTO = new RepoTO();
   
    configTO.setMachineName(null); // <<< Invalid
     
    // Run!
    try {
      new Config(localDir, configTO, repoTO);
      fail("Machine name should not have been accepted.");
    }
    catch (ConfigException e) { 
      TestAssertUtil.assertErrorStackTraceContains("Machine name", e);     
   
  }
 
  @Test
  public void testConfigMultiChunkerNull() throws Exception {
    // Setup
    File localDir = new File("/some/folder");
    ConfigTO configTO = new ConfigTO();
    RepoTO repoTO = new RepoTO();
   
    configTO.setMachineName("somevalidmachinename"); // <<< valid
   
    repoTO.setChunkerTO(TestConfigUtil.createFixedChunkerTO()); // <<< valid
    repoTO.setRepoId(new byte[] { 0x01, 0x02 }); // <<< valid
    repoTO.setTransformers(null); // <<< valid
   
    repoTO.setMultiChunker(null); // <<< INVALID !!
       
    // Run!
    try {
      new Config(localDir, configTO, repoTO);
      fail("Config should not been have initialized.");
    }
    catch (ConfigException e) { 
      TestAssertUtil.assertErrorStackTraceContains("No multichunker", e);     
    }   
  }
 
  @Test
  @Ignore
  // TODO [low] ChunkerTO is not used yet; so no test for it.
  public void testConfigChunkerNull() throws Exception {
    // Setup
    File localDir = new File("/some/folder");
    ConfigTO configTO = new ConfigTO();
    RepoTO repoTO = new RepoTO();
   
    configTO.setMachineName("somevalidmachinename"); // <<< valid
   
    repoTO.setMultiChunker(TestConfigUtil.createZipMultiChunkerTO()); // <<< valid
    repoTO.setRepoId(new byte[] { 0x01, 0x02 }); // <<< valid
    repoTO.setTransformers(null); // <<< valid

    repoTO.setChunkerTO(null); // <<< INVALID !!

    // Run!
    try {
      new Config(localDir, configTO, repoTO);
      fail("Config should not been have initialized.");
    }
    catch (ConfigException e) { 
      TestAssertUtil.assertErrorStackTraceContains("No multichunker", e);     
    }   
  }
 
  @Test
  public void testConfigCipherTransformersInvalidType() throws Exception {
    // Setup
    File localDir = new File("/some/folder");
    ConfigTO configTO = new ConfigTO();
    RepoTO repoTO = new RepoTO();
   
    configTO.setMachineName("somevalidmachinename"); // <<< valid
   
    repoTO.setChunkerTO(TestConfigUtil.createFixedChunkerTO()); // <<< valid
    repoTO.setMultiChunker(TestConfigUtil.createZipMultiChunkerTO()); // <<< valid
    repoTO.setRepoId(new byte[] { 0x01, 0x02 }); // <<< valid
   
    // Set invalid transformer
    TransformerTO invalidTransformerTO = new TransformerTO();
    invalidTransformerTO.setType("invalid-typeXXX");
    invalidTransformerTO.setSettings(new HashMap<String, String>());   

    ArrayList<TransformerTO> transformers = new ArrayList<TransformerTO>();
    transformers.add(invalidTransformerTO);
   
    repoTO.setTransformers(transformers); // <<< INVALID !
   
    // Run!
    try {
      new Config(localDir, configTO, repoTO);
      fail("Transformer should NOT have been found.");
    }
    catch (ConfigException e) { 
      TestAssertUtil.assertErrorStackTraceContains("invalid-typeXXX", e);     
    }   
  }
 
  @Test
  @SuppressWarnings("serial")
  public void testConfigCipherTransformersCipherFound() throws Exception {   
    // Setup
    File localDir = new File("/some/folder");
    ConfigTO configTO = new ConfigTO();
    RepoTO repoTO = new RepoTO();
   
    configTO.setMachineName("somevalidmachinename"); // <<< valid
   
    repoTO.setChunkerTO(TestConfigUtil.createFixedChunkerTO()); // <<< valid
    repoTO.setMultiChunker(TestConfigUtil.createZipMultiChunkerTO()); // <<< valid
    repoTO.setRepoId(new byte[] { 0x01, 0x02 }); // <<< valid
    configTO.setMasterKey(createDummyMasterKey()); // <<< valid
   
    // Set invalid transformer
    TransformerTO invalidTransformerTO = new TransformerTO();
    invalidTransformerTO.setType("cipher");
    invalidTransformerTO.setSettings(new HashMap<String, String>() {
      {
        put("cipherspecs", "1,2");
      }
    });

    ArrayList<TransformerTO> transformers = new ArrayList<TransformerTO>();
    transformers.add(invalidTransformerTO);
   
    repoTO.setTransformers(transformers); // <<< valid
   
    // Run!
    Config config = new Config(localDir, configTO, repoTO);
   
    // Test
    assertNotNull(config.getChunker());
    assertNotNull(config.getMultiChunker());
    assertNotNull(config.getTransformer());
    assertEquals("CipherTransformer", config.getTransformer().getClass().getSimpleName());
 
 
  @Test
  @SuppressWarnings("serial")
  public void testConfigCipherTransformersCipherNotFound() throws Exception {   
    // Setup
    File localDir = new File("/some/folder");
    ConfigTO configTO = new ConfigTO();
    RepoTO repoTO = new RepoTO();
   
    configTO.setMachineName("somevalidmachinename"); // <<< valid
   
    repoTO.setChunkerTO(TestConfigUtil.createFixedChunkerTO()); // <<< valid
    repoTO.setMultiChunker(TestConfigUtil.createZipMultiChunkerTO()); // <<< valid
    repoTO.setRepoId(new byte[] { 0x01, 0x02 }); // <<< valid
    configTO.setMasterKey(createDummyMasterKey()); // <<< valid
   
    // Set invalid transformer
    TransformerTO invalidTransformerTO = new TransformerTO();
    invalidTransformerTO.setType("cipher");
    invalidTransformerTO.setSettings(new HashMap<String, String>() {
      {
        put("cipherspecs", "1,INVALIDXXXX"); // <<<< INVALID !
      }
    });

    ArrayList<TransformerTO> transformers = new ArrayList<TransformerTO>();
    transformers.add(invalidTransformerTO);
   
    repoTO.setTransformers(transformers);
   
    // Run!
    try {
      new Config(localDir, configTO, repoTO);
      fail("Transformer should NOT have been able to initialize.");
    }
    catch (ConfigException e) { 
      TestAssertUtil.assertErrorStackTraceContains("INVALIDXXXX", e);     
   
  } 
 
  private SaltedSecretKey createDummyMasterKey() {
    return new SaltedSecretKey(
      new SecretKeySpec(
        StringUtil.fromHex("44fda24d53b29828b62c362529bd9df5c8a92c2736bcae3a28b3d7b44488e36e246106aa5334813028abb2048eeb5e177df1c702d93cf82aeb7b6d59a8534ff0"),
        "AnyAlgorithm"
      ),
      StringUtil.fromHex("157599349e0f1bc713afff442db9d4c3201324073d51cb33407600f305500aa3fdb31136cb1f37bd51a48f183844257d42010a36133b32b424dd02bc63b349bc")     
    );
 
}
TOP

Related Classes of org.syncany.tests.config.ConfigTest

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.