diff --git a/build.xml b/build.xml
index 2903b7d..5f02dcf 100644
--- a/build.xml
+++ b/build.xml
@@ -218,6 +218,9 @@
   <property name="sqoop.test.postgresql.username"
             value="sqooptest" />
 
+  <property name="sqoop.test.postgresql.password"
+            value="" />
+
   <property name="sqoop.test.postgresql.pg_bulkload"
             value="pg_bulkload" />
 
@@ -847,6 +850,9 @@
       <sysproperty key="sqoop.test.postgresql.username"
                    value="${sqoop.test.postgresql.username}" />
 
+      <sysproperty key="sqoop.test.postgresql.password"
+                   value="${sqoop.test.postgresql.password}" />
+
       <sysproperty key="sqoop.test.postgresql.pg_bulkload"
                    value="${sqoop.test.postgresql.pg_bulkload}" />
 
diff --git a/src/test/com/cloudera/sqoop/manager/DirectPostgreSQLExportManualTest.java b/src/test/com/cloudera/sqoop/manager/DirectPostgreSQLExportManualTest.java
index 52095ef..b7c7416 100644
--- a/src/test/com/cloudera/sqoop/manager/DirectPostgreSQLExportManualTest.java
+++ b/src/test/com/cloudera/sqoop/manager/DirectPostgreSQLExportManualTest.java
@@ -29,6 +29,8 @@
 import org.apache.hadoop.mapred.JobConf;
 import com.cloudera.sqoop.TestExport;
 import com.cloudera.sqoop.mapreduce.db.DBConfiguration;
+import org.junit.Ignore;
+import org.junit.Test;
 
 
 /**
@@ -64,6 +66,8 @@
     System.getProperty("sqoop.test.postgresql.database", "sqooptest");
   static final String USERNAME =
     System.getProperty("sqoop.test.postgresql.username", "sqooptest");
+  static final String PASSWORD = System.getProperty(
+      "sqoop.test.postgresql.password");
   static final String CONNECT_STRING = HOST_URL + DATABASE;
 
   public DirectPostgreSQLExportManualTest() {
@@ -72,7 +76,7 @@
                                 "org.postgresql.Driver",
                                 getConnectString(),
                                 getUserName(),
-                                (String) null, (Integer) null);
+                                PASSWORD, (Integer) null);
     dbConf = new DBConfiguration(conf);
   }
 
@@ -138,6 +142,8 @@
         new ArrayList<String>(Arrays.asList(additionalArgv));
     args.add("--username");
     args.add(getUserName());
+    args.add("--password");
+    args.add(PASSWORD);
     args.add("--direct");
     return super.getArgv(includeHadoopFlags,
                          rowsPerStatement,
@@ -150,11 +156,34 @@
     ArrayList<String> args = new ArrayList<String>(Arrays.asList(extraArgs));
     args.add("--username");
     args.add(getUserName());
+    args.add("--password");
+    args.add(PASSWORD);
     return super.getCodeGenArgv(args.toArray(new String[0]));
   }
 
+  @Ignore("Ignoring this test case as direct export does not support --columns option.")
   @Override
+  @Test
   public void testColumnsExport() throws IOException, SQLException {
-    // Direct export does not support --columns option.
   }
+
+  @Ignore("Ignoring this test case as the scenario is not supported with direct export.")
+  @Override
+  @Test
+  public void testLessColumnsInFileThanInTable() throws IOException, SQLException {
+  }
+
+  @Ignore("Ignoring this test case as the scenario is not supported with direct export.")
+  @Override
+  @Test
+  public void testLessColumnsInFileThanInTableInputNullIntPassed() throws IOException, SQLException {
+  }
+
+  @Ignore("Ignoring this test case as the scenario is not supported with direct export.")
+  @Override
+  @Test
+  public void testLessColumnsInFileThanInTableInputNullStringPassed() throws IOException, SQLException {
+  }
+
+
 }
diff --git a/src/test/com/cloudera/sqoop/manager/PostgresqlExportTest.java b/src/test/com/cloudera/sqoop/manager/PostgresqlExportTest.java
index 38d6ba6..3323d07 100644
--- a/src/test/com/cloudera/sqoop/manager/PostgresqlExportTest.java
+++ b/src/test/com/cloudera/sqoop/manager/PostgresqlExportTest.java
@@ -51,13 +51,13 @@
     "sqoop.test.postgresql.connectstring.host_url",
     "jdbc:postgresql://localhost/");
   static final String DATABASE_USER = System.getProperty(
-    "sqoop.test.postgresql.connectstring.username",
+    "sqoop.test.postgresql.username",
     "sqooptest");
   static final String DATABASE_NAME = System.getProperty(
-    "sqoop.test.postgresql.connectstring.database",
+    "sqoop.test.postgresql.database",
     "sqooptest");
   static final String PASSWORD = System.getProperty(
-    "sqoop.test.postgresql.connectstring.password");
+    "sqoop.test.postgresql.password");
 
   static final String TABLE_NAME = "EMPLOYEES_PG";
   static final String PROCEDURE_NAME = "INSERT_AN_EMPLOYEE";
@@ -286,6 +286,8 @@
     args.add(CONNECT_STRING);
     args.add("--username");
     args.add(DATABASE_USER);
+    args.add("--password");
+    args.add(PASSWORD);
     args.add("-m");
     args.add("1");
 
diff --git a/src/test/com/cloudera/sqoop/manager/PostgresqlExternalTableImportTest.java b/src/test/com/cloudera/sqoop/manager/PostgresqlExternalTableImportTest.java
index 0515e09..6403b32 100644
--- a/src/test/com/cloudera/sqoop/manager/PostgresqlExternalTableImportTest.java
+++ b/src/test/com/cloudera/sqoop/manager/PostgresqlExternalTableImportTest.java
@@ -35,10 +35,10 @@
   static final String HOST_URL = System.getProperty("sqoop.test.postgresql.connectstring.host_url",
       "jdbc:postgresql://localhost/");
   static final String DATABASE_USER = System.getProperty(
-      "sqoop.test.postgresql.connectstring.username", "sqooptest");
+      "sqoop.test.postgresql.username", "sqooptest");
   static final String DATABASE_NAME = System.getProperty(
-      "sqoop.test.postgresql.connectstring.database", "sqooptest");
-  static final String PASSWORD = System.getProperty("sqoop.test.postgresql.connectstring.password");
+      "sqoop.test.postgresql.database", "sqooptest");
+  static final String PASSWORD = System.getProperty("sqoop.test.postgresql.password");
 
   static final String TABLE_NAME = "EMPLOYEES_PG";
   static final String NULL_TABLE_NAME = "NULL_EMPLOYEES_PG";
@@ -193,6 +193,8 @@
     args.add(CONNECT_STRING);
     args.add("--username");
     args.add(DATABASE_USER);
+    args.add("--password");
+    args.add(PASSWORD);
     args.add("--where");
     args.add("id > 1");
     args.add("-m");
diff --git a/src/test/com/cloudera/sqoop/manager/PostgresqlImportTest.java b/src/test/com/cloudera/sqoop/manager/PostgresqlImportTest.java
index 5872d25..ceae47c 100644
--- a/src/test/com/cloudera/sqoop/manager/PostgresqlImportTest.java
+++ b/src/test/com/cloudera/sqoop/manager/PostgresqlImportTest.java
@@ -94,13 +94,13 @@
     "sqoop.test.postgresql.connectstring.host_url",
     "jdbc:postgresql://localhost/");
   static final String DATABASE_USER = System.getProperty(
-    "sqoop.test.postgresql.connectstring.username",
+    "sqoop.test.postgresql.username",
     "sqooptest");
   static final String DATABASE_NAME = System.getProperty(
-    "sqoop.test.postgresql.connectstring.database",
+    "sqoop.test.postgresql.database",
     "sqooptest");
   static final String PASSWORD = System.getProperty(
-    "sqoop.test.postgresql.connectstring.password");
+    "sqoop.test.postgresql.password");
 
   static final String TABLE_NAME = "EMPLOYEES_PG";
   static final String NULL_TABLE_NAME = "NULL_EMPLOYEES_PG";
@@ -258,6 +258,8 @@
     args.add(CONNECT_STRING);
     args.add("--username");
     args.add(DATABASE_USER);
+    args.add("--password");
+    args.add(PASSWORD);
     args.add("--where");
     args.add("id > 1");
     args.add("-m");
@@ -342,6 +344,7 @@
     SqoopOptions options = new SqoopOptions(new Configuration());
     options.setConnectString(CONNECT_STRING);
     options.setUsername(DATABASE_USER);
+    options.setPassword(PASSWORD);
 
     ConnManager mgr = new PostgresqlManager(options);
     String[] tables = mgr.listTables();
