Get rid of old ant tests
							
								
								
									
										15
									
								
								.travis.yml
									
									
									
									
									
								
							
							
						
						| @ -17,25 +17,14 @@ install: | |||||||
| - yes | sdkmanager --list | - yes | sdkmanager --list | ||||||
| 
 | 
 | ||||||
| # After Travis updated image with Android base environment, building via ant is not possible anymore. | # After Travis updated image with Android base environment, building via ant is not possible anymore. | ||||||
| # Library tests are old-style tests, and trust on legacy Android ant environment. | # Port library tests to new-style with JUnit 4 and gradle build. | ||||||
| # Need to disable tests until they are ported to JUnit 4 and gradle build. |  | ||||||
| #- echo no | android create avd --force -n test -t $ANDROID_TARGET --abi $ANDROID_ABI -c 20M |  | ||||||
| #- emulator -avd test -no-window & |  | ||||||
| - rm pom.xml | - rm pom.xml | ||||||
| #- android update project -p . | 
 | ||||||
| #- chmod +x ./wait_for_emulator.sh |  | ||||||
| #- ./wait_for_emulator.sh |  | ||||||
| #  |  | ||||||
| # On the other hand, Travis still uses 'android' command behind the 'components' section update.  | # On the other hand, Travis still uses 'android' command behind the 'components' section update.  | ||||||
| # That command is obsolete and cannot update Android SDK Tools after 25.2.5. | # That command is obsolete and cannot update Android SDK Tools after 25.2.5. | ||||||
| # Let's solve it here with the new command 'sdkmanager' | # Let's solve it here with the new command 'sdkmanager' | ||||||
| - yes | sdkmanager --verbose tools | - yes | sdkmanager --verbose tools | ||||||
| script: | script: | ||||||
| #- ant clean |  | ||||||
| #- ant debug |  | ||||||
| #- cd test_client/tests |  | ||||||
| #- ant acceptance-test |  | ||||||
| #- cd ../.. |  | ||||||
| - ./gradlew clean build | - ./gradlew clean build | ||||||
| env: | env: | ||||||
|   global: |   global: | ||||||
|  | |||||||
| @ -1,3 +1,2 @@ | |||||||
| include ':' | include ':' | ||||||
| include ':sample_client' | include ':sample_client' | ||||||
| include ':test_client' |  | ||||||
| @ -1,9 +0,0 @@ | |||||||
| <?xml version="1.0" encoding="UTF-8"?> |  | ||||||
| <classpath> |  | ||||||
| 	<classpathentry kind="src" path="src"/> |  | ||||||
| 	<classpathentry kind="src" path="gen"/> |  | ||||||
| 	<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/> |  | ||||||
| 	<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/> |  | ||||||
| 	<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/> |  | ||||||
| 	<classpathentry kind="output" path="bin/classes"/> |  | ||||||
| </classpath> |  | ||||||
| @ -1,33 +0,0 @@ | |||||||
| <?xml version="1.0" encoding="UTF-8"?> |  | ||||||
| <projectDescription> |  | ||||||
| 	<name>ownCloud Android library test project</name> |  | ||||||
| 	<comment></comment> |  | ||||||
| 	<projects> |  | ||||||
| 	</projects> |  | ||||||
| 	<buildSpec> |  | ||||||
| 		<buildCommand> |  | ||||||
| 			<name>com.android.ide.eclipse.adt.ResourceManagerBuilder</name> |  | ||||||
| 			<arguments> |  | ||||||
| 			</arguments> |  | ||||||
| 		</buildCommand> |  | ||||||
| 		<buildCommand> |  | ||||||
| 			<name>com.android.ide.eclipse.adt.PreCompilerBuilder</name> |  | ||||||
| 			<arguments> |  | ||||||
| 			</arguments> |  | ||||||
| 		</buildCommand> |  | ||||||
| 		<buildCommand> |  | ||||||
| 			<name>org.eclipse.jdt.core.javabuilder</name> |  | ||||||
| 			<arguments> |  | ||||||
| 			</arguments> |  | ||||||
| 		</buildCommand> |  | ||||||
| 		<buildCommand> |  | ||||||
| 			<name>com.android.ide.eclipse.adt.ApkBuilder</name> |  | ||||||
| 			<arguments> |  | ||||||
| 			</arguments> |  | ||||||
| 		</buildCommand> |  | ||||||
| 	</buildSpec> |  | ||||||
| 	<natures> |  | ||||||
| 		<nature>com.android.ide.eclipse.adt.AndroidNature</nature> |  | ||||||
| 		<nature>org.eclipse.jdt.core.javanature</nature> |  | ||||||
| 	</natures> |  | ||||||
| </projectDescription> |  | ||||||
| @ -1,4 +0,0 @@ | |||||||
| eclipse.preferences.version=1 |  | ||||||
| org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 |  | ||||||
| org.eclipse.jdt.core.compiler.compliance=1.6 |  | ||||||
| org.eclipse.jdt.core.compiler.source=1.6 |  | ||||||
| @ -1,60 +0,0 @@ | |||||||
| <?xml version="1.0" encoding="utf-8"?> |  | ||||||
| <!--  ownCloud Android Library is available under MIT license |  | ||||||
|    Copyright (C) 2016 ownCloud GmbH. |  | ||||||
|      |  | ||||||
|    Permission is hereby granted, free of charge, to any person obtaining a copy |  | ||||||
|    of this software and associated documentation files (the "Software"), to deal |  | ||||||
|    in the Software without restriction, including without limitation the rights |  | ||||||
|    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |  | ||||||
|    copies of the Software, and to permit persons to whom the Software is |  | ||||||
|    furnished to do so, subject to the following conditions: |  | ||||||
|     |  | ||||||
|    The above copyright notice and this permission notice shall be included in |  | ||||||
|    all copies or substantial portions of the Software. |  | ||||||
|     |  | ||||||
|    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,  |  | ||||||
|    EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |  | ||||||
|    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND  |  | ||||||
|    NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS  |  | ||||||
|    BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN  |  | ||||||
|    ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN  |  | ||||||
|    CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |  | ||||||
|    THE SOFTWARE. |  | ||||||
| 
 |  | ||||||
|  --> |  | ||||||
|   |  | ||||||
| <manifest xmlns:android="http://schemas.android.com/apk/res/android" |  | ||||||
|     package="com.owncloud.android.lib.test_project" |  | ||||||
|     android:versionCode="1" |  | ||||||
|     android:versionName="1.0" > |  | ||||||
|      |  | ||||||
|     <uses-permission android:name="android.permission.USE_CREDENTIALS" /> |  | ||||||
|     <uses-permission android:name="android.permission.GET_ACCOUNTS" /> |  | ||||||
|     <uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" /> |  | ||||||
|     <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" /> |  | ||||||
|     <uses-permission android:name="android.permission.INTERNET"/> |  | ||||||
|     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> |  | ||||||
|     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> |  | ||||||
|     <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> |  | ||||||
| 
 |  | ||||||
| 	<uses-sdk |  | ||||||
|         android:minSdkVersion="14" |  | ||||||
|         android:targetSdkVersion="26" /> |  | ||||||
| 
 |  | ||||||
|     <application |  | ||||||
|         android:allowBackup="true" |  | ||||||
|         android:icon="@drawable/ic_launcher" |  | ||||||
|         android:label="@string/app_name" |  | ||||||
|         android:theme="@style/AppTheme" > |  | ||||||
|         <activity |  | ||||||
|             android:name="com.owncloud.android.lib.test_project.TestActivity" |  | ||||||
|             android:label="@string/app_name" > |  | ||||||
|             <intent-filter> |  | ||||||
|                 <action android:name="android.intent.action.MAIN" /> |  | ||||||
| 
 |  | ||||||
|                 <category android:name="android.intent.category.LAUNCHER" /> |  | ||||||
|             </intent-filter> |  | ||||||
|         </activity> |  | ||||||
|     </application> |  | ||||||
| 
 |  | ||||||
| </manifest> |  | ||||||
| Before Width: | Height: | Size: 21 KiB | 
| @ -1,3 +0,0 @@ | |||||||
| This is a simple text file. |  | ||||||
| 
 |  | ||||||
| To make some tests. |  | ||||||
| @ -1,50 +0,0 @@ | |||||||
| apply plugin: 'com.android.application' |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| repositories { |  | ||||||
|     jcenter() |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| dependencies { |  | ||||||
|     implementation project(':') |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| android { |  | ||||||
|     compileSdkVersion 26 |  | ||||||
| 
 |  | ||||||
|     sourceSets { |  | ||||||
|         main { |  | ||||||
|             manifest.srcFile 'AndroidManifest.xml' |  | ||||||
|             java.srcDirs = ['src'] |  | ||||||
|             resources.srcDirs = ['src'] |  | ||||||
|             aidl.srcDirs = ['src'] |  | ||||||
|             renderscript.srcDirs = ['src'] |  | ||||||
|             res.srcDirs = ['res'] |  | ||||||
|             assets.srcDirs = ['assets'] |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         // Move the tests to tests/java, tests/res, etc... |  | ||||||
|         androidTest.setRoot('tests') |  | ||||||
| 
 |  | ||||||
|         // Move the build types to build-types/<type> |  | ||||||
|         // For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ... |  | ||||||
|         // This moves them out of them default location under src/<type>/... which would |  | ||||||
|         // conflict with src/ being used by the main source set. |  | ||||||
|         // Adding new build types or product flavors should be accompanied |  | ||||||
|         // by a similar customization. |  | ||||||
|         debug.setRoot('build-types/debug') |  | ||||||
|         release.setRoot('build-types/release') |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     lintOptions { |  | ||||||
|         abortOnError false |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     packagingOptions { |  | ||||||
|         exclude 'META-INF/LICENSE.txt' |  | ||||||
|     } |  | ||||||
|     compileOptions { |  | ||||||
|         sourceCompatibility JavaVersion.VERSION_1_8 |  | ||||||
|         targetCompatibility JavaVersion.VERSION_1_8 |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @ -1,92 +0,0 @@ | |||||||
| <?xml version="1.0" encoding="UTF-8"?> |  | ||||||
| <project name="ownCloud Android library test client" default="help"> |  | ||||||
| 
 |  | ||||||
|     <!-- The local.properties file is created and updated by the 'android' tool. |  | ||||||
|          It contains the path to the SDK. It should *NOT* be checked into |  | ||||||
|          Version Control Systems. --> |  | ||||||
|     <property file="local.properties" /> |  | ||||||
| 
 |  | ||||||
|     <!-- The ant.properties file can be created by you. It is only edited by the |  | ||||||
|          'android' tool to add properties to it. |  | ||||||
|          This is the place to change some Ant specific build properties. |  | ||||||
|          Here are some properties you may want to change/update: |  | ||||||
| 
 |  | ||||||
|          source.dir |  | ||||||
|              The name of the source directory. Default is 'src'. |  | ||||||
|          out.dir |  | ||||||
|              The name of the output directory. Default is 'bin'. |  | ||||||
| 
 |  | ||||||
|          For other overridable properties, look at the beginning of the rules |  | ||||||
|          files in the SDK, at tools/ant/build.xml |  | ||||||
| 
 |  | ||||||
|          Properties related to the SDK location or the project target should |  | ||||||
|          be updated using the 'android' tool with the 'update' action. |  | ||||||
| 
 |  | ||||||
|          This file is an integral part of the build system for your |  | ||||||
|          application and should be checked into Version Control Systems. |  | ||||||
| 
 |  | ||||||
|          --> |  | ||||||
|     <property file="ant.properties" /> |  | ||||||
| 
 |  | ||||||
|     <!-- if sdk.dir was not set from one of the property file, then |  | ||||||
|          get it from the ANDROID_HOME env var. |  | ||||||
|          This must be done before we load project.properties since |  | ||||||
|          the proguard config can use sdk.dir --> |  | ||||||
|     <property environment="env" /> |  | ||||||
|     <condition property="sdk.dir" value="${env.ANDROID_HOME}"> |  | ||||||
|         <isset property="env.ANDROID_HOME" /> |  | ||||||
|     </condition> |  | ||||||
| 
 |  | ||||||
|     <!-- The project.properties file is created and updated by the 'android' |  | ||||||
|          tool, as well as ADT. |  | ||||||
| 
 |  | ||||||
|          This contains project specific properties such as project target, and library |  | ||||||
|          dependencies. Lower level build properties are stored in ant.properties |  | ||||||
|          (or in .classpath for Eclipse projects). |  | ||||||
| 
 |  | ||||||
|          This file is an integral part of the build system for your |  | ||||||
|          application and should be checked into Version Control Systems. --> |  | ||||||
|     <loadproperties srcFile="project.properties" /> |  | ||||||
| 
 |  | ||||||
|     <!-- quick check on sdk.dir --> |  | ||||||
|     <fail |  | ||||||
|             message="sdk.dir is missing. Make sure to generate local.properties using 'android update project' or to inject it through the ANDROID_HOME environment variable." |  | ||||||
|             unless="sdk.dir" |  | ||||||
|     /> |  | ||||||
| 
 |  | ||||||
|     <!-- |  | ||||||
|         Import per project custom build rules if present at the root of the project. |  | ||||||
|         This is the place to put custom intermediary targets such as: |  | ||||||
|             -pre-build |  | ||||||
|             -pre-compile |  | ||||||
|             -post-compile (This is typically used for code obfuscation. |  | ||||||
|                            Compiled code location: ${out.classes.absolute.dir} |  | ||||||
|                            If this is not done in place, override ${out.dex.input.absolute.dir}) |  | ||||||
|             -post-package |  | ||||||
|             -post-build |  | ||||||
|             -pre-clean |  | ||||||
|     --> |  | ||||||
|     <import file="custom_rules.xml" optional="true" /> |  | ||||||
| 
 |  | ||||||
|     <!-- Import the actual build file. |  | ||||||
| 
 |  | ||||||
|          To customize existing targets, there are two options: |  | ||||||
|          - Customize only one target: |  | ||||||
|              - copy/paste the target into this file, *before* the |  | ||||||
|                <import> task. |  | ||||||
|              - customize it to your needs. |  | ||||||
|          - Customize the whole content of build.xml |  | ||||||
|              - copy/paste the content of the rules files (minus the top node) |  | ||||||
|                into this file, replacing the <import> task. |  | ||||||
|              - customize to your needs. |  | ||||||
| 
 |  | ||||||
|          *********************** |  | ||||||
|          ****** IMPORTANT ****** |  | ||||||
|          *********************** |  | ||||||
|          In all cases you must update the value of version-tag below to read 'custom' instead of an integer, |  | ||||||
|          in order to avoid having your file be overridden by tools such as "android update project" |  | ||||||
|     --> |  | ||||||
|     <!-- version-tag: 1 --> |  | ||||||
|     <import file="${sdk.dir}/tools/ant/build.xml" /> |  | ||||||
| 
 |  | ||||||
| </project> |  | ||||||
| @ -1,75 +0,0 @@ | |||||||
| <?xml version="1.0" encoding="UTF-8"?> |  | ||||||
| <project name="custom_rules"> |  | ||||||
| 	<target name="-pre-build" > |  | ||||||
| 		<!-- Replace OC server URL if set in environment --> |  | ||||||
| 		<if> |  | ||||||
| 			<condition> |  | ||||||
| 				<isset property="env.OCTEST_SERVER_BASE_URL" /> |  | ||||||
| 			</condition> |  | ||||||
| 			<then> |  | ||||||
| 				<replaceregexp |  | ||||||
| 					file="res/values/setup.xml" |  | ||||||
| 					match='("server_base_url">)\s*(<)' |  | ||||||
| 					replace="\1${env.OCTEST_SERVER_BASE_URL}\2" |  | ||||||
| 					byline="true" /> |  | ||||||
| 			</then> |  | ||||||
| 		</if> |  | ||||||
| 		 |  | ||||||
| 		<!-- Replace OC server URL 2 if set in environment --> |  | ||||||
| 		<if> |  | ||||||
| 			<condition> |  | ||||||
| 				<isset property="env.OCTEST_SERVER_BASE_URL_2" /> |  | ||||||
| 			</condition> |  | ||||||
| 			<then> |  | ||||||
| 				<replaceregexp |  | ||||||
| 					file="res/values/setup.xml" |  | ||||||
| 					match='("server_base_url_2">)\s*(<)' |  | ||||||
| 					replace="\1${env.OCTEST_SERVER_BASE_URL_2}\2" |  | ||||||
| 					byline="true" /> |  | ||||||
| 			</then> |  | ||||||
| 		</if> |  | ||||||
| 		 |  | ||||||
| 		<!-- Replace test username if set in environment --> |  | ||||||
| 		<if> |  | ||||||
| 			<condition> |  | ||||||
| 				<isset property="env.OCTEST_USERNAME" /> |  | ||||||
| 			</condition> |  | ||||||
| 			<then> |  | ||||||
| 				<echo>Setting username ${env.OCTEST_USERNAME}</echo> |  | ||||||
| 				<replaceregexp |  | ||||||
| 					file="res/values/setup.xml" |  | ||||||
| 					match='("username">)\s*(<)' |  | ||||||
| 					replace="\1${env.OCTEST_USERNAME}\2" |  | ||||||
| 					byline="true" /> |  | ||||||
| 			</then> |  | ||||||
| 		</if> |  | ||||||
| 				 |  | ||||||
| 		<!-- Replace test username if set in environment --> |  | ||||||
| 		<if> |  | ||||||
| 			<condition> |  | ||||||
| 				<isset property="env.OCTEST_PASSWORD" /> |  | ||||||
| 			</condition> |  | ||||||
| 			<then> |  | ||||||
| 				<replaceregexp |  | ||||||
| 				file="res/values/setup.xml" |  | ||||||
| 				match='("password">)\s*(<)' |  | ||||||
| 				replace="\1${env.OCTEST_PASSWORD}\2" |  | ||||||
| 				byline="true" /> |  | ||||||
| 			</then> |  | ||||||
| 		</if> |  | ||||||
| 		 |  | ||||||
| 		<!-- Make Travis build number available to the test app in the emulator --> |  | ||||||
| 		<if> |  | ||||||
| 			<condition> |  | ||||||
| 				<isset property="env.TRAVIS_BUILD_NUMBER" /> |  | ||||||
| 			</condition> |  | ||||||
| 			<then> |  | ||||||
| 				<replaceregexp |  | ||||||
| 				file="res/values/setup.xml" |  | ||||||
| 				match='("build_number">)\s*(<)' |  | ||||||
| 				replace="\1${env.TRAVIS_BUILD_NUMBER}\2" |  | ||||||
| 				byline="true" /> |  | ||||||
| 			</then> |  | ||||||
| 		</if> |  | ||||||
| 	</target> |  | ||||||
| </project> |  | ||||||
							
								
								
									
										
											BIN
										
									
								
								test_client/gradle/wrapper/gradle-wrapper.jar
									
									
									
									
										vendored
									
									
								
							
							
						
						| @ -1,6 +0,0 @@ | |||||||
| #Mon Dec 28 10:00:20 PST 2015 |  | ||||||
| distributionBase=GRADLE_USER_HOME |  | ||||||
| distributionPath=wrapper/dists |  | ||||||
| zipStoreBase=GRADLE_USER_HOME |  | ||||||
| zipStorePath=wrapper/dists |  | ||||||
| distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip |  | ||||||
							
								
								
									
										164
									
								
								test_client/gradlew
									
									
									
									
										vendored
									
									
								
							
							
						
						| @ -1,164 +0,0 @@ | |||||||
| #!/usr/bin/env bash |  | ||||||
| 
 |  | ||||||
| ############################################################################## |  | ||||||
| ## |  | ||||||
| ##  Gradle start up script for UN*X |  | ||||||
| ## |  | ||||||
| ############################################################################## |  | ||||||
| 
 |  | ||||||
| # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. |  | ||||||
| DEFAULT_JVM_OPTS="" |  | ||||||
| 
 |  | ||||||
| APP_NAME="Gradle" |  | ||||||
| APP_BASE_NAME=`basename "$0"` |  | ||||||
| 
 |  | ||||||
| # Use the maximum available, or set MAX_FD != -1 to use that value. |  | ||||||
| MAX_FD="maximum" |  | ||||||
| 
 |  | ||||||
| warn ( ) { |  | ||||||
|     echo "$*" |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| die ( ) { |  | ||||||
|     echo |  | ||||||
|     echo "$*" |  | ||||||
|     echo |  | ||||||
|     exit 1 |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| # OS specific support (must be 'true' or 'false'). |  | ||||||
| cygwin=false |  | ||||||
| msys=false |  | ||||||
| darwin=false |  | ||||||
| case "`uname`" in |  | ||||||
|   CYGWIN* ) |  | ||||||
|     cygwin=true |  | ||||||
|     ;; |  | ||||||
|   Darwin* ) |  | ||||||
|     darwin=true |  | ||||||
|     ;; |  | ||||||
|   MINGW* ) |  | ||||||
|     msys=true |  | ||||||
|     ;; |  | ||||||
| esac |  | ||||||
| 
 |  | ||||||
| # For Cygwin, ensure paths are in UNIX format before anything is touched. |  | ||||||
| if $cygwin ; then |  | ||||||
|     [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"` |  | ||||||
| fi |  | ||||||
| 
 |  | ||||||
| # Attempt to set APP_HOME |  | ||||||
| # Resolve links: $0 may be a link |  | ||||||
| PRG="$0" |  | ||||||
| # Need this for relative symlinks. |  | ||||||
| while [ -h "$PRG" ] ; do |  | ||||||
|     ls=`ls -ld "$PRG"` |  | ||||||
|     link=`expr "$ls" : '.*-> \(.*\)$'` |  | ||||||
|     if expr "$link" : '/.*' > /dev/null; then |  | ||||||
|         PRG="$link" |  | ||||||
|     else |  | ||||||
|         PRG=`dirname "$PRG"`"/$link" |  | ||||||
|     fi |  | ||||||
| done |  | ||||||
| SAVED="`pwd`" |  | ||||||
| cd "`dirname \"$PRG\"`/" >&- |  | ||||||
| APP_HOME="`pwd -P`" |  | ||||||
| cd "$SAVED" >&- |  | ||||||
| 
 |  | ||||||
| CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar |  | ||||||
| 
 |  | ||||||
| # Determine the Java command to use to start the JVM. |  | ||||||
| if [ -n "$JAVA_HOME" ] ; then |  | ||||||
|     if [ -x "$JAVA_HOME/jre/sh/java" ] ; then |  | ||||||
|         # IBM's JDK on AIX uses strange locations for the executables |  | ||||||
|         JAVACMD="$JAVA_HOME/jre/sh/java" |  | ||||||
|     else |  | ||||||
|         JAVACMD="$JAVA_HOME/bin/java" |  | ||||||
|     fi |  | ||||||
|     if [ ! -x "$JAVACMD" ] ; then |  | ||||||
|         die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME |  | ||||||
| 
 |  | ||||||
| Please set the JAVA_HOME variable in your environment to match the |  | ||||||
| location of your Java installation." |  | ||||||
|     fi |  | ||||||
| else |  | ||||||
|     JAVACMD="java" |  | ||||||
|     which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. |  | ||||||
| 
 |  | ||||||
| Please set the JAVA_HOME variable in your environment to match the |  | ||||||
| location of your Java installation." |  | ||||||
| fi |  | ||||||
| 
 |  | ||||||
| # Increase the maximum file descriptors if we can. |  | ||||||
| if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then |  | ||||||
|     MAX_FD_LIMIT=`ulimit -H -n` |  | ||||||
|     if [ $? -eq 0 ] ; then |  | ||||||
|         if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then |  | ||||||
|             MAX_FD="$MAX_FD_LIMIT" |  | ||||||
|         fi |  | ||||||
|         ulimit -n $MAX_FD |  | ||||||
|         if [ $? -ne 0 ] ; then |  | ||||||
|             warn "Could not set maximum file descriptor limit: $MAX_FD" |  | ||||||
|         fi |  | ||||||
|     else |  | ||||||
|         warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" |  | ||||||
|     fi |  | ||||||
| fi |  | ||||||
| 
 |  | ||||||
| # For Darwin, add options to specify how the application appears in the dock |  | ||||||
| if $darwin; then |  | ||||||
|     GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" |  | ||||||
| fi |  | ||||||
| 
 |  | ||||||
| # For Cygwin, switch paths to Windows format before running java |  | ||||||
| if $cygwin ; then |  | ||||||
|     APP_HOME=`cygpath --path --mixed "$APP_HOME"` |  | ||||||
|     CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` |  | ||||||
| 
 |  | ||||||
|     # We build the pattern for arguments to be converted via cygpath |  | ||||||
|     ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` |  | ||||||
|     SEP="" |  | ||||||
|     for dir in $ROOTDIRSRAW ; do |  | ||||||
|         ROOTDIRS="$ROOTDIRS$SEP$dir" |  | ||||||
|         SEP="|" |  | ||||||
|     done |  | ||||||
|     OURCYGPATTERN="(^($ROOTDIRS))" |  | ||||||
|     # Add a user-defined pattern to the cygpath arguments |  | ||||||
|     if [ "$GRADLE_CYGPATTERN" != "" ] ; then |  | ||||||
|         OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" |  | ||||||
|     fi |  | ||||||
|     # Now convert the arguments - kludge to limit ourselves to /bin/sh |  | ||||||
|     i=0 |  | ||||||
|     for arg in "$@" ; do |  | ||||||
|         CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` |  | ||||||
|         CHECK2=`echo "$arg"|egrep -c "^-"`                                 ### Determine if an option |  | ||||||
| 
 |  | ||||||
|         if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then                    ### Added a condition |  | ||||||
|             eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` |  | ||||||
|         else |  | ||||||
|             eval `echo args$i`="\"$arg\"" |  | ||||||
|         fi |  | ||||||
|         i=$((i+1)) |  | ||||||
|     done |  | ||||||
|     case $i in |  | ||||||
|         (0) set -- ;; |  | ||||||
|         (1) set -- "$args0" ;; |  | ||||||
|         (2) set -- "$args0" "$args1" ;; |  | ||||||
|         (3) set -- "$args0" "$args1" "$args2" ;; |  | ||||||
|         (4) set -- "$args0" "$args1" "$args2" "$args3" ;; |  | ||||||
|         (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; |  | ||||||
|         (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; |  | ||||||
|         (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; |  | ||||||
|         (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; |  | ||||||
|         (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; |  | ||||||
|     esac |  | ||||||
| fi |  | ||||||
| 
 |  | ||||||
| # Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules |  | ||||||
| function splitJvmOpts() { |  | ||||||
|     JVM_OPTS=("$@") |  | ||||||
| } |  | ||||||
| eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS |  | ||||||
| JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" |  | ||||||
| 
 |  | ||||||
| exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" |  | ||||||
							
								
								
									
										90
									
								
								test_client/gradlew.bat
									
									
									
									
										vendored
									
									
								
							
							
						
						| @ -1,90 +0,0 @@ | |||||||
| @if "%DEBUG%" == "" @echo off |  | ||||||
| @rem ########################################################################## |  | ||||||
| @rem |  | ||||||
| @rem  Gradle startup script for Windows |  | ||||||
| @rem |  | ||||||
| @rem ########################################################################## |  | ||||||
| 
 |  | ||||||
| @rem Set local scope for the variables with windows NT shell |  | ||||||
| if "%OS%"=="Windows_NT" setlocal |  | ||||||
| 
 |  | ||||||
| @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. |  | ||||||
| set DEFAULT_JVM_OPTS= |  | ||||||
| 
 |  | ||||||
| set DIRNAME=%~dp0 |  | ||||||
| if "%DIRNAME%" == "" set DIRNAME=. |  | ||||||
| set APP_BASE_NAME=%~n0 |  | ||||||
| set APP_HOME=%DIRNAME% |  | ||||||
| 
 |  | ||||||
| @rem Find java.exe |  | ||||||
| if defined JAVA_HOME goto findJavaFromJavaHome |  | ||||||
| 
 |  | ||||||
| set JAVA_EXE=java.exe |  | ||||||
| %JAVA_EXE% -version >NUL 2>&1 |  | ||||||
| if "%ERRORLEVEL%" == "0" goto init |  | ||||||
| 
 |  | ||||||
| echo. |  | ||||||
| echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. |  | ||||||
| echo. |  | ||||||
| echo Please set the JAVA_HOME variable in your environment to match the |  | ||||||
| echo location of your Java installation. |  | ||||||
| 
 |  | ||||||
| goto fail |  | ||||||
| 
 |  | ||||||
| :findJavaFromJavaHome |  | ||||||
| set JAVA_HOME=%JAVA_HOME:"=% |  | ||||||
| set JAVA_EXE=%JAVA_HOME%/bin/java.exe |  | ||||||
| 
 |  | ||||||
| if exist "%JAVA_EXE%" goto init |  | ||||||
| 
 |  | ||||||
| echo. |  | ||||||
| echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% |  | ||||||
| echo. |  | ||||||
| echo Please set the JAVA_HOME variable in your environment to match the |  | ||||||
| echo location of your Java installation. |  | ||||||
| 
 |  | ||||||
| goto fail |  | ||||||
| 
 |  | ||||||
| :init |  | ||||||
| @rem Get command-line arguments, handling Windowz variants |  | ||||||
| 
 |  | ||||||
| if not "%OS%" == "Windows_NT" goto win9xME_args |  | ||||||
| if "%@eval[2+2]" == "4" goto 4NT_args |  | ||||||
| 
 |  | ||||||
| :win9xME_args |  | ||||||
| @rem Slurp the command line arguments. |  | ||||||
| set CMD_LINE_ARGS= |  | ||||||
| set _SKIP=2 |  | ||||||
| 
 |  | ||||||
| :win9xME_args_slurp |  | ||||||
| if "x%~1" == "x" goto execute |  | ||||||
| 
 |  | ||||||
| set CMD_LINE_ARGS=%* |  | ||||||
| goto execute |  | ||||||
| 
 |  | ||||||
| :4NT_args |  | ||||||
| @rem Get arguments from the 4NT Shell from JP Software |  | ||||||
| set CMD_LINE_ARGS=%$ |  | ||||||
| 
 |  | ||||||
| :execute |  | ||||||
| @rem Setup the command line |  | ||||||
| 
 |  | ||||||
| set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar |  | ||||||
| 
 |  | ||||||
| @rem Execute Gradle |  | ||||||
| "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% |  | ||||||
| 
 |  | ||||||
| :end |  | ||||||
| @rem End local scope for the variables with windows NT shell |  | ||||||
| if "%ERRORLEVEL%"=="0" goto mainEnd |  | ||||||
| 
 |  | ||||||
| :fail |  | ||||||
| rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of |  | ||||||
| rem the _cmd.exe /c_ return code! |  | ||||||
| if  not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 |  | ||||||
| exit /b 1 |  | ||||||
| 
 |  | ||||||
| :mainEnd |  | ||||||
| if "%OS%"=="Windows_NT" endlocal |  | ||||||
| 
 |  | ||||||
| :omega |  | ||||||
| Before Width: | Height: | Size: 50 KiB | 
| @ -1,15 +0,0 @@ | |||||||
| # This file is automatically generated by Android Tools. |  | ||||||
| # Do not modify this file -- YOUR CHANGES WILL BE ERASED! |  | ||||||
| # |  | ||||||
| # This file must be checked in Version Control Systems. |  | ||||||
| # |  | ||||||
| # To customize properties used by the Ant build system edit |  | ||||||
| # "ant.properties", and override values to adapt the script to your |  | ||||||
| # project structure. |  | ||||||
| # |  | ||||||
| # To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home): |  | ||||||
| #proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt |  | ||||||
| 
 |  | ||||||
| # Project target. |  | ||||||
| target=android-24 |  | ||||||
| android.library.reference.1=.. |  | ||||||
| Before Width: | Height: | Size: 7.5 KiB | 
| Before Width: | Height: | Size: 3.7 KiB | 
| Before Width: | Height: | Size: 12 KiB | 
| Before Width: | Height: | Size: 24 KiB | 
| @ -1,39 +0,0 @@ | |||||||
| <!--  ownCloud Android Library is available under MIT license |  | ||||||
|    Copyright (C) 2016 ownCloud GmbH. |  | ||||||
|      |  | ||||||
|    Permission is hereby granted, free of charge, to any person obtaining a copy |  | ||||||
|    of this software and associated documentation files (the "Software"), to deal |  | ||||||
|    in the Software without restriction, including without limitation the rights |  | ||||||
|    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |  | ||||||
|    copies of the Software, and to permit persons to whom the Software is |  | ||||||
|    furnished to do so, subject to the following conditions: |  | ||||||
|     |  | ||||||
|    The above copyright notice and this permission notice shall be included in |  | ||||||
|    all copies or substantial portions of the Software. |  | ||||||
|     |  | ||||||
|    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,  |  | ||||||
|    EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |  | ||||||
|    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND  |  | ||||||
|    NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS  |  | ||||||
|    BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN  |  | ||||||
|    ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN  |  | ||||||
|    CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |  | ||||||
|    THE SOFTWARE. |  | ||||||
| 
 |  | ||||||
|  --> |  | ||||||
|  <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" |  | ||||||
|     xmlns:tools="http://schemas.android.com/tools" |  | ||||||
|     android:layout_width="match_parent" |  | ||||||
|     android:layout_height="match_parent" |  | ||||||
|     android:paddingBottom="@dimen/activity_vertical_margin" |  | ||||||
|     android:paddingLeft="@dimen/activity_horizontal_margin" |  | ||||||
|     android:paddingRight="@dimen/activity_horizontal_margin" |  | ||||||
|     android:paddingTop="@dimen/activity_vertical_margin" |  | ||||||
|     tools:context=".TestActivity" > |  | ||||||
| 
 |  | ||||||
|     <TextView |  | ||||||
|         android:layout_width="wrap_content" |  | ||||||
|         android:layout_height="wrap_content" |  | ||||||
|         android:text="@string/hello_world" /> |  | ||||||
| 
 |  | ||||||
| </RelativeLayout> |  | ||||||
| @ -1,32 +0,0 @@ | |||||||
| <!--  ownCloud Android Library is available under MIT license |  | ||||||
|    Copyright (C) 2016 ownCloud GmbH. |  | ||||||
|      |  | ||||||
|    Permission is hereby granted, free of charge, to any person obtaining a copy |  | ||||||
|    of this software and associated documentation files (the "Software"), to deal |  | ||||||
|    in the Software without restriction, including without limitation the rights |  | ||||||
|    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |  | ||||||
|    copies of the Software, and to permit persons to whom the Software is |  | ||||||
|    furnished to do so, subject to the following conditions: |  | ||||||
|     |  | ||||||
|    The above copyright notice and this permission notice shall be included in |  | ||||||
|    all copies or substantial portions of the Software. |  | ||||||
|     |  | ||||||
|    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,  |  | ||||||
|    EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |  | ||||||
|    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND  |  | ||||||
|    NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS  |  | ||||||
|    BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN  |  | ||||||
|    ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN  |  | ||||||
|    CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |  | ||||||
|    THE SOFTWARE. |  | ||||||
| 
 |  | ||||||
|  --> |  | ||||||
|  <menu xmlns:android="http://schemas.android.com/apk/res/android" > |  | ||||||
| 
 |  | ||||||
|     <item |  | ||||||
|         android:id="@+id/action_settings" |  | ||||||
|         android:orderInCategory="100" |  | ||||||
|         android:showAsAction="never" |  | ||||||
|         android:title="@string/action_settings"/> |  | ||||||
| 
 |  | ||||||
| </menu> |  | ||||||
| @ -1,32 +0,0 @@ | |||||||
| <!--  ownCloud Android Library is available under MIT license |  | ||||||
|    Copyright (C) 2016 ownCloud GmbH. |  | ||||||
|      |  | ||||||
|    Permission is hereby granted, free of charge, to any person obtaining a copy |  | ||||||
|    of this software and associated documentation files (the "Software"), to deal |  | ||||||
|    in the Software without restriction, including without limitation the rights |  | ||||||
|    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |  | ||||||
|    copies of the Software, and to permit persons to whom the Software is |  | ||||||
|    furnished to do so, subject to the following conditions: |  | ||||||
|     |  | ||||||
|    The above copyright notice and this permission notice shall be included in |  | ||||||
|    all copies or substantial portions of the Software. |  | ||||||
|     |  | ||||||
|    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,  |  | ||||||
|    EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |  | ||||||
|    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND  |  | ||||||
|    NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS  |  | ||||||
|    BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN  |  | ||||||
|    ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN  |  | ||||||
|    CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |  | ||||||
|    THE SOFTWARE. |  | ||||||
| 
 |  | ||||||
|  --> |  | ||||||
|   |  | ||||||
|  <resources> |  | ||||||
| 
 |  | ||||||
|     <!-- |  | ||||||
|          Customize dimensions originally defined in res/values/dimens.xml (such as |  | ||||||
|          screen margins) for sw600dp devices (e.g. 7" tablets) here. |  | ||||||
|     --> |  | ||||||
| 
 |  | ||||||
| </resources> |  | ||||||
| @ -1,33 +0,0 @@ | |||||||
| <!--  ownCloud Android Library is available under MIT license |  | ||||||
|    Copyright (C) 2016 ownCloud GmbH. |  | ||||||
|      |  | ||||||
|    Permission is hereby granted, free of charge, to any person obtaining a copy |  | ||||||
|    of this software and associated documentation files (the "Software"), to deal |  | ||||||
|    in the Software without restriction, including without limitation the rights |  | ||||||
|    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |  | ||||||
|    copies of the Software, and to permit persons to whom the Software is |  | ||||||
|    furnished to do so, subject to the following conditions: |  | ||||||
|     |  | ||||||
|    The above copyright notice and this permission notice shall be included in |  | ||||||
|    all copies or substantial portions of the Software. |  | ||||||
|     |  | ||||||
|    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,  |  | ||||||
|    EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |  | ||||||
|    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND  |  | ||||||
|    NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS  |  | ||||||
|    BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN  |  | ||||||
|    ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN  |  | ||||||
|    CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |  | ||||||
|    THE SOFTWARE. |  | ||||||
| 
 |  | ||||||
|  --> |  | ||||||
|   |  | ||||||
|  <resources> |  | ||||||
| 
 |  | ||||||
|     <!-- |  | ||||||
|          Customize dimensions originally defined in res/values/dimens.xml (such as |  | ||||||
|          screen margins) for sw720dp devices (e.g. 10" tablets) in landscape here. |  | ||||||
|     --> |  | ||||||
|     <dimen name="activity_horizontal_margin">128dp</dimen> |  | ||||||
| 
 |  | ||||||
| </resources> |  | ||||||
| @ -1,35 +0,0 @@ | |||||||
| <!--  ownCloud Android Library is available under MIT license |  | ||||||
|    Copyright (C) 2016 ownCloud GmbH. |  | ||||||
|      |  | ||||||
|    Permission is hereby granted, free of charge, to any person obtaining a copy |  | ||||||
|    of this software and associated documentation files (the "Software"), to deal |  | ||||||
|    in the Software without restriction, including without limitation the rights |  | ||||||
|    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |  | ||||||
|    copies of the Software, and to permit persons to whom the Software is |  | ||||||
|    furnished to do so, subject to the following conditions: |  | ||||||
|     |  | ||||||
|    The above copyright notice and this permission notice shall be included in |  | ||||||
|    all copies or substantial portions of the Software. |  | ||||||
|     |  | ||||||
|    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,  |  | ||||||
|    EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |  | ||||||
|    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND  |  | ||||||
|    NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS  |  | ||||||
|    BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN  |  | ||||||
|    ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN  |  | ||||||
|    CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |  | ||||||
|    THE SOFTWARE. |  | ||||||
| 
 |  | ||||||
|  --> |  | ||||||
|   |  | ||||||
|  <resources> |  | ||||||
| 
 |  | ||||||
|     <!-- |  | ||||||
|         Base application theme for API 11+. This theme completely replaces |  | ||||||
|         AppBaseTheme from res/values/styles.xml on API 11+ devices. |  | ||||||
|     --> |  | ||||||
|     <style name="AppBaseTheme" parent="android:Theme.Holo.Light"> |  | ||||||
|         <!-- API 11 theme customizations can go here. --> |  | ||||||
|     </style> |  | ||||||
| 
 |  | ||||||
| </resources> |  | ||||||
| @ -1,36 +0,0 @@ | |||||||
| <!--  ownCloud Android Library is available under MIT license |  | ||||||
|    Copyright (C) 2016 ownCloud GmbH. |  | ||||||
|      |  | ||||||
|    Permission is hereby granted, free of charge, to any person obtaining a copy |  | ||||||
|    of this software and associated documentation files (the "Software"), to deal |  | ||||||
|    in the Software without restriction, including without limitation the rights |  | ||||||
|    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |  | ||||||
|    copies of the Software, and to permit persons to whom the Software is |  | ||||||
|    furnished to do so, subject to the following conditions: |  | ||||||
|     |  | ||||||
|    The above copyright notice and this permission notice shall be included in |  | ||||||
|    all copies or substantial portions of the Software. |  | ||||||
|     |  | ||||||
|    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,  |  | ||||||
|    EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |  | ||||||
|    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND  |  | ||||||
|    NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS  |  | ||||||
|    BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN  |  | ||||||
|    ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN  |  | ||||||
|    CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |  | ||||||
|    THE SOFTWARE. |  | ||||||
| 
 |  | ||||||
|  --> |  | ||||||
|   |  | ||||||
|  <resources> |  | ||||||
| 
 |  | ||||||
|     <!-- |  | ||||||
|         Base application theme for API 14+. This theme completely replaces |  | ||||||
|         AppBaseTheme from BOTH res/values/styles.xml and |  | ||||||
|         res/values-v11/styles.xml on API 14+ devices. |  | ||||||
|     --> |  | ||||||
|     <style name="AppBaseTheme" parent="android:Theme.Holo.Light.DarkActionBar"> |  | ||||||
|         <!-- API 14 theme customizations can go here. --> |  | ||||||
|     </style> |  | ||||||
| 
 |  | ||||||
| </resources> |  | ||||||
| @ -1,30 +0,0 @@ | |||||||
| <!--  ownCloud Android Library is available under MIT license |  | ||||||
|    Copyright (C) 2016 ownCloud GmbH. |  | ||||||
|      |  | ||||||
|    Permission is hereby granted, free of charge, to any person obtaining a copy |  | ||||||
|    of this software and associated documentation files (the "Software"), to deal |  | ||||||
|    in the Software without restriction, including without limitation the rights |  | ||||||
|    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |  | ||||||
|    copies of the Software, and to permit persons to whom the Software is |  | ||||||
|    furnished to do so, subject to the following conditions: |  | ||||||
|     |  | ||||||
|    The above copyright notice and this permission notice shall be included in |  | ||||||
|    all copies or substantial portions of the Software. |  | ||||||
|     |  | ||||||
|    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,  |  | ||||||
|    EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |  | ||||||
|    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND  |  | ||||||
|    NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS  |  | ||||||
|    BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN  |  | ||||||
|    ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN  |  | ||||||
|    CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |  | ||||||
|    THE SOFTWARE. |  | ||||||
| 
 |  | ||||||
|  --> |  | ||||||
|  <resources> |  | ||||||
| 
 |  | ||||||
|     <!-- Default screen margins, per the Android Design guidelines. --> |  | ||||||
|     <dimen name="activity_horizontal_margin">16dp</dimen> |  | ||||||
|     <dimen name="activity_vertical_margin">16dp</dimen> |  | ||||||
| 
 |  | ||||||
| </resources> |  | ||||||
| @ -1,33 +0,0 @@ | |||||||
| <?xml version="1.0" encoding="utf-8"?> |  | ||||||
| <!--  ownCloud Android Library is available under MIT license |  | ||||||
|    Copyright (C) 2016 ownCloud GmbH. |  | ||||||
|      |  | ||||||
|    Permission is hereby granted, free of charge, to any person obtaining a copy |  | ||||||
|    of this software and associated documentation files (the "Software"), to deal |  | ||||||
|    in the Software without restriction, including without limitation the rights |  | ||||||
|    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |  | ||||||
|    copies of the Software, and to permit persons to whom the Software is |  | ||||||
|    furnished to do so, subject to the following conditions: |  | ||||||
|     |  | ||||||
|    The above copyright notice and this permission notice shall be included in |  | ||||||
|    all copies or substantial portions of the Software. |  | ||||||
|     |  | ||||||
|    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,  |  | ||||||
|    EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |  | ||||||
|    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND  |  | ||||||
|    NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS  |  | ||||||
|    BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN  |  | ||||||
|    ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN  |  | ||||||
|    CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |  | ||||||
|    THE SOFTWARE. |  | ||||||
| 
 |  | ||||||
|  --> |  | ||||||
|   |  | ||||||
| <resources> |  | ||||||
|     <string name="build_number"></string> |  | ||||||
|     <string name="server_base_url">https://qa.oc.solidgear.es</string> |  | ||||||
|     <string name="server_base_url_2">https://qa2.oc.solidgear.es</string> |  | ||||||
|     <string name="username">android-library-test</string> |  | ||||||
|     <string name="password">letitgo,letitgo,thatperfectappisgone</string> |  | ||||||
|     <string name ="user_agent">Mozilla/5.0 (Android) ownCloud test project</string> |  | ||||||
| </resources> |  | ||||||
| @ -1,33 +0,0 @@ | |||||||
| <?xml version="1.0" encoding="utf-8"?> |  | ||||||
| <!--  ownCloud Android Library is available under MIT license |  | ||||||
|    Copyright (C) 2016 ownCloud GmbH. |  | ||||||
|      |  | ||||||
|    Permission is hereby granted, free of charge, to any person obtaining a copy |  | ||||||
|    of this software and associated documentation files (the "Software"), to deal |  | ||||||
|    in the Software without restriction, including without limitation the rights |  | ||||||
|    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |  | ||||||
|    copies of the Software, and to permit persons to whom the Software is |  | ||||||
|    furnished to do so, subject to the following conditions: |  | ||||||
|     |  | ||||||
|    The above copyright notice and this permission notice shall be included in |  | ||||||
|    all copies or substantial portions of the Software. |  | ||||||
|     |  | ||||||
|    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,  |  | ||||||
|    EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |  | ||||||
|    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND  |  | ||||||
|    NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS  |  | ||||||
|    BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN  |  | ||||||
|    ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN  |  | ||||||
|    CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |  | ||||||
|    THE SOFTWARE. |  | ||||||
| 
 |  | ||||||
|  --> |  | ||||||
| 
 |  | ||||||
| <resources> |  | ||||||
| 
 |  | ||||||
|     <string name="app_name">oc_framework-test-project</string> |  | ||||||
|     <string name="action_settings">Settings</string> |  | ||||||
|     <string name="hello_world">Hello world!</string> |  | ||||||
|     <string name="test_account_not_found">The test account %1$s could not be found in the device</string> |  | ||||||
| 
 |  | ||||||
| </resources> |  | ||||||
| @ -1,43 +0,0 @@ | |||||||
| <!--  ownCloud Android Library is available under MIT license |  | ||||||
|    Copyright (C) 2016 ownCloud GmbH. |  | ||||||
|      |  | ||||||
|    Permission is hereby granted, free of charge, to any person obtaining a copy |  | ||||||
|    of this software and associated documentation files (the "Software"), to deal |  | ||||||
|    in the Software without restriction, including without limitation the rights |  | ||||||
|    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |  | ||||||
|    copies of the Software, and to permit persons to whom the Software is |  | ||||||
|    furnished to do so, subject to the following conditions: |  | ||||||
|     |  | ||||||
|    The above copyright notice and this permission notice shall be included in |  | ||||||
|    all copies or substantial portions of the Software. |  | ||||||
|     |  | ||||||
|    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,  |  | ||||||
|    EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |  | ||||||
|    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND  |  | ||||||
|    NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS  |  | ||||||
|    BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN  |  | ||||||
|    ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN  |  | ||||||
|    CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |  | ||||||
|    THE SOFTWARE. |  | ||||||
| 
 |  | ||||||
|  --> |  | ||||||
|  <resources> |  | ||||||
| 
 |  | ||||||
|     <!-- |  | ||||||
|         Base application theme, dependent on API level. This theme is replaced |  | ||||||
|         by AppBaseTheme from res/values-vXX/styles.xml on newer devices. |  | ||||||
|     --> |  | ||||||
|     <style name="AppBaseTheme" parent="android:Theme.Light"> |  | ||||||
|         <!-- |  | ||||||
|             Theme customizations available in newer API levels can go in |  | ||||||
|             res/values-vXX/styles.xml, while customizations related to |  | ||||||
|             backward-compatibility can go here. |  | ||||||
|         --> |  | ||||||
|     </style> |  | ||||||
| 
 |  | ||||||
|     <!-- Application theme. --> |  | ||||||
|     <style name="AppTheme" parent="AppBaseTheme"> |  | ||||||
|         <!-- All customizations that are NOT specific to a particular API-level can go here. --> |  | ||||||
|     </style> |  | ||||||
| 
 |  | ||||||
| </resources> |  | ||||||
| @ -1,2 +0,0 @@ | |||||||
| include ':tests' |  | ||||||
| include ':' |  | ||||||
| @ -1,371 +0,0 @@ | |||||||
| /* ownCloud Android Library is available under MIT license |  | ||||||
|  *   Copyright (C) 2018 ownCloud GmbH. |  | ||||||
|  * |  | ||||||
|  *   Permission is hereby granted, free of charge, to any person obtaining a copy |  | ||||||
|  *   of this software and associated documentation files (the "Software"), to deal |  | ||||||
|  *   in the Software without restriction, including without limitation the rights |  | ||||||
|  *   to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |  | ||||||
|  *   copies of the Software, and to permit persons to whom the Software is |  | ||||||
|  *   furnished to do so, subject to the following conditions: |  | ||||||
|  * |  | ||||||
|  *   The above copyright notice and this permission notice shall be included in |  | ||||||
|  *   all copies or substantial portions of the Software. |  | ||||||
|  * |  | ||||||
|  *   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |  | ||||||
|  *   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |  | ||||||
|  *   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND |  | ||||||
|  *   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS |  | ||||||
|  *   BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN |  | ||||||
|  *   ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN |  | ||||||
|  *   CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |  | ||||||
|  *   THE SOFTWARE. |  | ||||||
|  * |  | ||||||
|  */ |  | ||||||
| 
 |  | ||||||
| package com.owncloud.android.lib.test_project; |  | ||||||
| 
 |  | ||||||
| import android.app.Activity; |  | ||||||
| import android.content.Context; |  | ||||||
| import android.net.Uri; |  | ||||||
| import android.os.Bundle; |  | ||||||
| import android.util.Log; |  | ||||||
| import android.view.Menu; |  | ||||||
| 
 |  | ||||||
| import com.owncloud.android.lib.common.OwnCloudClient; |  | ||||||
| import com.owncloud.android.lib.common.authentication.OwnCloudCredentialsFactory; |  | ||||||
| import com.owncloud.android.lib.common.operations.RemoteOperationResult; |  | ||||||
| import com.owncloud.android.lib.resources.files.CreateRemoteFolderOperation; |  | ||||||
| import com.owncloud.android.lib.resources.files.DownloadRemoteFileOperation; |  | ||||||
| import com.owncloud.android.lib.resources.files.ReadRemoteFolderOperation; |  | ||||||
| import com.owncloud.android.lib.resources.files.RemoteFile; |  | ||||||
| import com.owncloud.android.lib.resources.files.RemoveRemoteFileOperation; |  | ||||||
| import com.owncloud.android.lib.resources.files.RenameRemoteFileOperation; |  | ||||||
| import com.owncloud.android.lib.resources.files.UploadRemoteFileOperation; |  | ||||||
| import com.owncloud.android.lib.resources.files.chunks.ChunkedUploadRemoteFileOperation; |  | ||||||
| import com.owncloud.android.lib.resources.shares.CreateRemoteShareOperation; |  | ||||||
| import com.owncloud.android.lib.resources.shares.GetRemoteSharesOperation; |  | ||||||
| import com.owncloud.android.lib.resources.shares.RemoveRemoteShareOperation; |  | ||||||
| import com.owncloud.android.lib.resources.shares.ShareType; |  | ||||||
| import com.owncloud.android.lib.resources.users.GetRemoteUserAvatarOperation; |  | ||||||
| import com.owncloud.android.lib.resources.users.GetRemoteUserQuotaOperation; |  | ||||||
| 
 |  | ||||||
| import java.io.File; |  | ||||||
| import java.io.FileOutputStream; |  | ||||||
| import java.io.IOException; |  | ||||||
| import java.io.InputStream; |  | ||||||
| 
 |  | ||||||
| /** |  | ||||||
|  * Activity to test OC framework |  | ||||||
|  * @author masensio |  | ||||||
|  * @author David A. Velasco |  | ||||||
|  * @author David González Verdugo |  | ||||||
|  */ |  | ||||||
| 
 |  | ||||||
| public class TestActivity extends Activity { |  | ||||||
| 
 |  | ||||||
| 	private static final String TAG = null; |  | ||||||
| 	// This account must exists on the server side |  | ||||||
| 	private String mServerUri; |  | ||||||
| 	private String mUser; |  | ||||||
| 	private String mPass; |  | ||||||
| 
 |  | ||||||
| 	private static final int BUFFER_SIZE = 1024; |  | ||||||
| 
 |  | ||||||
| 	public static final String ASSETS__TEXT_FILE_NAME = "textFile.txt"; |  | ||||||
| 	public static final String ASSETS__IMAGE_FILE_NAME = "imageFile.png"; |  | ||||||
| 	public static final String ASSETS__VIDEO_FILE_NAME = "videoFile.MP4"; |  | ||||||
| 
 |  | ||||||
| 	//private Account mAccount = null; |  | ||||||
| 	private OwnCloudClient mClient; |  | ||||||
| 
 |  | ||||||
| 	@Override |  | ||||||
| 	protected void onCreate(Bundle savedInstanceState) { |  | ||||||
| 		super.onCreate(savedInstanceState); |  | ||||||
| 		setContentView(R.layout.activity_test); |  | ||||||
| 
 |  | ||||||
| 		mServerUri = getString(R.string.server_base_url); |  | ||||||
| 		mUser = getString(R.string.username); |  | ||||||
| 		mPass = getString(R.string.password); |  | ||||||
| 
 |  | ||||||
| 		mClient = new OwnCloudClient(Uri.parse(mServerUri)); |  | ||||||
| 		mClient.setFollowRedirects(true); |  | ||||||
| 		mClient.setCredentials( |  | ||||||
| 				OwnCloudCredentialsFactory.newBasicCredentials( |  | ||||||
| 						mUser, |  | ||||||
| 						mPass |  | ||||||
| 				) |  | ||||||
| 		); |  | ||||||
| 		mClient.setBaseUri(Uri.parse(mServerUri)); |  | ||||||
| 
 |  | ||||||
| 		Log.v(TAG, "onCreate finished, ownCloud client ready"); |  | ||||||
| 
 |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	@Override |  | ||||||
| 	public boolean onCreateOptionsMenu(Menu menu) { |  | ||||||
| 		// Inflate the menu; this adds items to the action bar if it is present. |  | ||||||
| 		getMenuInflater().inflate(R.menu.test, menu); |  | ||||||
| 		return true; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	/** |  | ||||||
| 	 * Access to the library method to Create a Folder |  | ||||||
| 	 * @param remotePath            Full path to the new directory to create in the remote server. |  | ||||||
|      * @param createFullPath        'True' means that all the ancestor folders should be created if |  | ||||||
|      * 								don't exist yet. |  | ||||||
| 	 * |  | ||||||
| 	 * @return |  | ||||||
| 	 */ |  | ||||||
| 	public RemoteOperationResult createFolder(String remotePath, boolean createFullPath) { |  | ||||||
| 
 |  | ||||||
| 		return TestActivity.createFolder(remotePath, createFullPath, mClient); |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	/** |  | ||||||
| 	 * Access to the library method to Create a Folder |  | ||||||
| 	 * @param remotePath		Full path to the new directory to create in the remote server. |  | ||||||
|      * @param createFullPath    'True' means that all the ancestor folders should be created if |  | ||||||
|      * 							don't exist yet. |  | ||||||
| 	 * @param client			Client instance configured to access the target OC server. |  | ||||||
| 	 * |  | ||||||
| 	 * @return	Result of the operation |  | ||||||
| 	 */ |  | ||||||
| 	public static RemoteOperationResult createFolder( |  | ||||||
| 			String remotePath, boolean createFullPath, OwnCloudClient client |  | ||||||
| 		) { |  | ||||||
| 
 |  | ||||||
| 		CreateRemoteFolderOperation createOperation = |  | ||||||
| 				new CreateRemoteFolderOperation(remotePath, createFullPath); |  | ||||||
| 		RemoteOperationResult result =  createOperation.execute(client); |  | ||||||
| 
 |  | ||||||
| 		return result; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	/** |  | ||||||
| 	 * Access to the library method to Rename a File or Folder |  | ||||||
| 	 * @param oldName			Old name of the file. |  | ||||||
|      * @param oldRemotePath		Old remote path of the file. For folders it starts and ends by "/" |  | ||||||
|      * @param newName			New name to set as the name of file. |  | ||||||
|      * @param isFolder			'true' for folder and 'false' for files |  | ||||||
|      * |  | ||||||
|      * @return |  | ||||||
|      */ |  | ||||||
| 
 |  | ||||||
| 	public RemoteOperationResult renameFile(String oldName, String oldRemotePath, String newName, boolean isFolder) { |  | ||||||
| 
 |  | ||||||
| 		RenameRemoteFileOperation renameOperation = new RenameRemoteFileOperation(oldName, oldRemotePath, newName, isFolder); |  | ||||||
| 		RemoteOperationResult result = renameOperation.execute(mClient); |  | ||||||
| 
 |  | ||||||
| 		return result; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	/** |  | ||||||
| 	 * Access to the library method to Remove a File or Folder |  | ||||||
| 	 * |  | ||||||
| 	 * @param remotePath	Remote path of the file or folder in the server. |  | ||||||
| 	 * @return |  | ||||||
| 	 */ |  | ||||||
| 	public RemoteOperationResult removeFile(String remotePath) { |  | ||||||
| 		RemoveRemoteFileOperation removeOperation = new RemoveRemoteFileOperation(remotePath); |  | ||||||
| 		RemoteOperationResult result = removeOperation.execute(mClient); |  | ||||||
| 		return result; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	/** |  | ||||||
| 	 * Access to the library method to Remove a File or Folder |  | ||||||
| 	 * |  | ||||||
| 	 * @param remotePath	Remote path of the file or folder in the server. |  | ||||||
| 	 * @return |  | ||||||
| 	 */ |  | ||||||
| 	public static RemoteOperationResult removeFile(String remotePath, OwnCloudClient client) { |  | ||||||
| 		RemoveRemoteFileOperation removeOperation = new RemoveRemoteFileOperation(remotePath); |  | ||||||
| 		RemoteOperationResult result = removeOperation.execute(client); |  | ||||||
| 		return result; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 	/** |  | ||||||
| 	 * Access to the library method to Read a Folder (PROPFIND DEPTH 1) |  | ||||||
| 	 * @param remotePath |  | ||||||
| 	 * |  | ||||||
| 	 * @return |  | ||||||
| 	 */ |  | ||||||
| 	public RemoteOperationResult readFile(String remotePath) { |  | ||||||
| 
 |  | ||||||
| 		ReadRemoteFolderOperation readOperation= new ReadRemoteFolderOperation(remotePath); |  | ||||||
| 		RemoteOperationResult result = readOperation.execute(mClient); |  | ||||||
| 
 |  | ||||||
| 		return result; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	/** |  | ||||||
| 	 * Access to the library method to Download a File |  | ||||||
| 	 * @param remotePath |  | ||||||
| 	 * |  | ||||||
| 	 * @return |  | ||||||
| 	 */ |  | ||||||
| 	public RemoteOperationResult downloadFile(RemoteFile remoteFile, String temporalFolder) { |  | ||||||
| 		// Create folder |  | ||||||
| 		String path =  "/owncloud/tmp/" + temporalFolder; |  | ||||||
| 		File privateFolder = getFilesDir(); |  | ||||||
| 		File folder = new File(privateFolder.getAbsolutePath() + "/" + path); |  | ||||||
| 		folder.mkdirs(); |  | ||||||
| 
 |  | ||||||
| 		DownloadRemoteFileOperation downloadOperation = new DownloadRemoteFileOperation(remoteFile.getRemotePath(), folder.getAbsolutePath()); |  | ||||||
| 		RemoteOperationResult result = downloadOperation.execute(mClient); |  | ||||||
| 
 |  | ||||||
| 		return result; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	/** Access to the library method to Upload a File |  | ||||||
| 	 * @param storagePath |  | ||||||
| 	 * @param remotePath |  | ||||||
| 	 * @param mimeType |  | ||||||
| 	 * |  | ||||||
| 	 * @return |  | ||||||
| 	 */ |  | ||||||
| 	public RemoteOperationResult uploadFile( |  | ||||||
| 			String storagePath, String remotePath, String mimeType |  | ||||||
| 			) { |  | ||||||
| 
 |  | ||||||
| 		return TestActivity.uploadFile(storagePath, remotePath, mimeType, mClient); |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	/** Access to the library method to Upload a File |  | ||||||
| 	 * @param storagePath |  | ||||||
| 	 * @param remotePath |  | ||||||
| 	 * @param mimeType |  | ||||||
| 	 * @param client			Client instance configured to access the target OC server. |  | ||||||
| 	 * |  | ||||||
| 	 * @return |  | ||||||
| 	 */ |  | ||||||
| 	public static RemoteOperationResult uploadFile( |  | ||||||
| 			String storagePath, String remotePath, String mimeType, OwnCloudClient client |  | ||||||
| 			) { |  | ||||||
| 
 |  | ||||||
|         String fileLastModifTimestamp = getFileLastModifTimeStamp(storagePath); |  | ||||||
| 
 |  | ||||||
|         UploadRemoteFileOperation uploadOperation; |  | ||||||
| 
 |  | ||||||
| 		if ((new File(storagePath)).length() > ChunkedUploadRemoteFileOperation.CHUNK_SIZE ) { |  | ||||||
|             uploadOperation = new ChunkedUploadRemoteFileOperation("1", |  | ||||||
|             		storagePath, remotePath, mimeType, TAG, fileLastModifTimestamp |  | ||||||
|     		); |  | ||||||
|         } else { |  | ||||||
|             uploadOperation = new UploadRemoteFileOperation( |  | ||||||
|             		storagePath, remotePath, mimeType, fileLastModifTimestamp |  | ||||||
|     		); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
| 		RemoteOperationResult result = uploadOperation.execute(client); |  | ||||||
| 		return result; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	/** Access to the library method to Get Shares |  | ||||||
| 	 * |  | ||||||
| 	 * @return |  | ||||||
| 	 */ |  | ||||||
| 	public RemoteOperationResult getShares(){ |  | ||||||
| 
 |  | ||||||
| 		GetRemoteSharesOperation getOperation = new GetRemoteSharesOperation(); |  | ||||||
| 		RemoteOperationResult result = getOperation.execute(mClient); |  | ||||||
| 
 |  | ||||||
| 		return result; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	/** Access to the library method to Create Share |  | ||||||
| 	 * @param path			Full path of the file/folder being shared. Mandatory argument |  | ||||||
| 	 * @param shareType		0 = user, 1 = group, 3 = Public link. Mandatory argument |  | ||||||
| 	 * @param shareWith		User/group ID with who the file should be shared.  This is mandatory for shareType of 0 or 1 |  | ||||||
| 	 * @param publicUpload	If false (default) public cannot upload to a public shared folder. |  | ||||||
| 	 * 						If true public can upload to a shared folder. Only available for public link shares |  | ||||||
| 	 * @param password		Password to protect a public link share. Only available for public link shares |  | ||||||
| 	 * @param permissions	1 - Read only  Default for public shares |  | ||||||
| 	 * 						2 - Update |  | ||||||
| 	 * 						4 - Create |  | ||||||
| 	 * 						8 - Delete |  | ||||||
| 	 * 						16- Re-share |  | ||||||
| 	 * 						31- All above Default for private shares |  | ||||||
| 	 * 						For user or group shares. |  | ||||||
| 	 * 						To obtain combinations, add the desired values together. |  | ||||||
| 	 * 						For instance, for Re-Share, delete, read, update add 16+8+2+1 = 27. |  | ||||||
| 	 * |  | ||||||
| 	 * @return |  | ||||||
| 	 */ |  | ||||||
| 	public RemoteOperationResult createShare(String path, ShareType shareType, String shareWith, boolean publicUpload, |  | ||||||
| 			String password, int permissions){ |  | ||||||
| 
 |  | ||||||
| 		CreateRemoteShareOperation createOperation = new CreateRemoteShareOperation(path, shareType, shareWith, publicUpload, password, permissions); |  | ||||||
| 		RemoteOperationResult result = createOperation.execute(mClient); |  | ||||||
| 
 |  | ||||||
| 		return result; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 	/** |  | ||||||
| 	 * Access to the library method to Remove Share |  | ||||||
| 	 * |  | ||||||
| 	 * @param idShare	Share ID |  | ||||||
| 	 */ |  | ||||||
| 
 |  | ||||||
| 	public RemoteOperationResult removeShare(int idShare) { |  | ||||||
| 		RemoveRemoteShareOperation removeOperation = new RemoveRemoteShareOperation(idShare); |  | ||||||
| 		RemoteOperationResult result = removeOperation.execute(mClient); |  | ||||||
| 
 |  | ||||||
| 		return result; |  | ||||||
| 
 |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
|     public RemoteOperationResult getQuota(String remotePath) { |  | ||||||
|         GetRemoteUserQuotaOperation getUserQuotaOperation = new GetRemoteUserQuotaOperation(remotePath); |  | ||||||
|         return getUserQuotaOperation.execute(mClient); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 	public RemoteOperationResult getUserAvatar(int dimension, String etag) { |  | ||||||
| 		GetRemoteUserAvatarOperation getUserAvatarOperation = new GetRemoteUserAvatarOperation(dimension, etag); |  | ||||||
| 		return getUserAvatarOperation.execute(mClient); |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	/** |  | ||||||
| 	 * Extracts file from AssetManager to cache folder. |  | ||||||
| 	 * |  | ||||||
| 	 * @param	fileName	Name of the asset file to extract. |  | ||||||
| 	 * @return				File instance of the extracted file. |  | ||||||
| 	 */ |  | ||||||
| 	public File extractAsset(String fileName) throws IOException { |  | ||||||
| 		return TestActivity.extractAsset(fileName, this); |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	/** |  | ||||||
| 	 * Extracts file from AssetManager to cache folder. |  | ||||||
| 	 * |  | ||||||
| 	 * @param	fileName	Name of the asset file to extract. |  | ||||||
| 	 * @param	context		Android context to access assets and file system. |  | ||||||
| 	 * @return				File instance of the extracted file. |  | ||||||
| 	 */ |  | ||||||
| 	public static File extractAsset(String fileName, Context context) throws IOException { |  | ||||||
| 		File extractedFile = new File(context.getCacheDir() + File.separator + fileName); |  | ||||||
| 		if (!extractedFile.exists()) { |  | ||||||
| 			InputStream in = null; |  | ||||||
| 			FileOutputStream out = null; |  | ||||||
| 			in = context.getAssets().open(fileName); |  | ||||||
| 			out = new FileOutputStream(extractedFile); |  | ||||||
| 			byte[] buffer = new byte[BUFFER_SIZE]; |  | ||||||
| 			int readCount; |  | ||||||
| 			while((readCount = in.read(buffer)) != -1){ |  | ||||||
| 				out.write(buffer, 0, readCount); |  | ||||||
| 			} |  | ||||||
| 			out.flush(); |  | ||||||
| 			out.close(); |  | ||||||
| 			in.close(); |  | ||||||
| 		} |  | ||||||
| 		return extractedFile; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
|     private static String getFileLastModifTimeStamp (String storagePath) { |  | ||||||
|         File file = new File(storagePath); |  | ||||||
|         Long timeStampLong = file.lastModified()/1000; |  | ||||||
|         return timeStampLong.toString(); |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @ -1,10 +0,0 @@ | |||||||
| <?xml version="1.0" encoding="UTF-8"?> |  | ||||||
| <classpath> |  | ||||||
| 	<classpathentry kind="src" path="src"/> |  | ||||||
| 	<classpathentry kind="src" path="gen"/> |  | ||||||
| 	<classpathentry kind="con" path="com.android.ide.eclipse.adt.ANDROID_FRAMEWORK"/> |  | ||||||
| 	<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.LIBRARIES"/> |  | ||||||
| 	<classpathentry exported="true" kind="con" path="com.android.ide.eclipse.adt.DEPENDENCIES"/> |  | ||||||
| 	<classpathentry combineaccessrules="false" kind="src" path="/ownCloud Android library test project"/> |  | ||||||
| 	<classpathentry kind="output" path="bin/classes"/> |  | ||||||
| </classpath> |  | ||||||
| @ -1,33 +0,0 @@ | |||||||
| <?xml version="1.0" encoding="UTF-8"?> |  | ||||||
| <projectDescription> |  | ||||||
| 	<name>ownCloud Android library test cases</name> |  | ||||||
| 	<comment></comment> |  | ||||||
| 	<projects> |  | ||||||
| 	</projects> |  | ||||||
| 	<buildSpec> |  | ||||||
| 		<buildCommand> |  | ||||||
| 			<name>com.android.ide.eclipse.adt.ResourceManagerBuilder</name> |  | ||||||
| 			<arguments> |  | ||||||
| 			</arguments> |  | ||||||
| 		</buildCommand> |  | ||||||
| 		<buildCommand> |  | ||||||
| 			<name>com.android.ide.eclipse.adt.PreCompilerBuilder</name> |  | ||||||
| 			<arguments> |  | ||||||
| 			</arguments> |  | ||||||
| 		</buildCommand> |  | ||||||
| 		<buildCommand> |  | ||||||
| 			<name>org.eclipse.jdt.core.javabuilder</name> |  | ||||||
| 			<arguments> |  | ||||||
| 			</arguments> |  | ||||||
| 		</buildCommand> |  | ||||||
| 		<buildCommand> |  | ||||||
| 			<name>com.android.ide.eclipse.adt.ApkBuilder</name> |  | ||||||
| 			<arguments> |  | ||||||
| 			</arguments> |  | ||||||
| 		</buildCommand> |  | ||||||
| 	</buildSpec> |  | ||||||
| 	<natures> |  | ||||||
| 		<nature>com.android.ide.eclipse.adt.AndroidNature</nature> |  | ||||||
| 		<nature>org.eclipse.jdt.core.javanature</nature> |  | ||||||
| 	</natures> |  | ||||||
| </projectDescription> |  | ||||||
| @ -1,4 +0,0 @@ | |||||||
| eclipse.preferences.version=1 |  | ||||||
| org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 |  | ||||||
| org.eclipse.jdt.core.compiler.compliance=1.6 |  | ||||||
| org.eclipse.jdt.core.compiler.source=1.6 |  | ||||||
| @ -1,41 +0,0 @@ | |||||||
| <?xml version="1.0" encoding="utf-8"?> |  | ||||||
| <!--  ownCloud Android Library is available under MIT license |  | ||||||
|    Copyright (C) 2016 ownCloud GmbH. |  | ||||||
|      |  | ||||||
|    Permission is hereby granted, free of charge, to any person obtaining a copy |  | ||||||
|    of this software and associated documentation files (the "Software"), to deal |  | ||||||
|    in the Software without restriction, including without limitation the rights |  | ||||||
|    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |  | ||||||
|    copies of the Software, and to permit persons to whom the Software is |  | ||||||
|    furnished to do so, subject to the following conditions: |  | ||||||
|     |  | ||||||
|    The above copyright notice and this permission notice shall be included in |  | ||||||
|    all copies or substantial portions of the Software. |  | ||||||
|     |  | ||||||
|    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,  |  | ||||||
|    EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |  | ||||||
|    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND  |  | ||||||
|    NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS  |  | ||||||
|    BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN  |  | ||||||
|    ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN  |  | ||||||
|    CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |  | ||||||
|    THE SOFTWARE. |  | ||||||
| 
 |  | ||||||
|  --> |  | ||||||
|   |  | ||||||
| <manifest xmlns:android="http://schemas.android.com/apk/res/android" |  | ||||||
|     package="com.owncloud.android.lib.test_project.test" |  | ||||||
|     android:versionCode="1" |  | ||||||
|     android:versionName="1.0" > |  | ||||||
| 
 |  | ||||||
|     <uses-sdk android:minSdkVersion="14" /> |  | ||||||
|     <application> |  | ||||||
|         <uses-library android:name="android.test.runner" /> |  | ||||||
|     </application> |  | ||||||
| 
 |  | ||||||
|     <instrumentation |  | ||||||
|         android:name="android.test.InstrumentationTestRunner" |  | ||||||
|         android:label="Tests for com.owncloud.android.lib.test_project" |  | ||||||
|         android:targetPackage="com.owncloud.android.lib.test_project" /> |  | ||||||
| 
 |  | ||||||
| </manifest> |  | ||||||
| @ -1,18 +0,0 @@ | |||||||
| # This file is used to override default values used by the Ant build system. |  | ||||||
| # |  | ||||||
| # This file must be checked into Version Control Systems, as it is |  | ||||||
| # integral to the build system of your project. |  | ||||||
| 
 |  | ||||||
| # This file is only used by the Ant script. |  | ||||||
| 
 |  | ||||||
| # You can use this to override default values such as |  | ||||||
| #  'source.dir' for the location of your java source folder and |  | ||||||
| #  'out.dir' for the location of your output folder. |  | ||||||
| 
 |  | ||||||
| # You can also use it define how the release builds are signed by declaring |  | ||||||
| # the following properties: |  | ||||||
| #  'key.store' for the location of your keystore and |  | ||||||
| #  'key.alias' for the name of the key to use. |  | ||||||
| # The password will be asked during the build when you use the 'release' target. |  | ||||||
| 
 |  | ||||||
| tested.project.dir=.. |  | ||||||
| @ -1,34 +0,0 @@ | |||||||
| apply plugin: 'com.android.application' |  | ||||||
| 
 |  | ||||||
| dependencies { |  | ||||||
|     implementation fileTree(dir: 'libs', include: '*.jar') |  | ||||||
|     implementation project(':') |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| android { |  | ||||||
|     compileSdkVersion 26 |  | ||||||
| 
 |  | ||||||
|     sourceSets { |  | ||||||
|         main { |  | ||||||
|             manifest.srcFile 'AndroidManifest.xml' |  | ||||||
|             java.srcDirs = ['src'] |  | ||||||
|             resources.srcDirs = ['src'] |  | ||||||
|             aidl.srcDirs = ['src'] |  | ||||||
|             renderscript.srcDirs = ['src'] |  | ||||||
|             res.srcDirs = ['res'] |  | ||||||
|             assets.srcDirs = ['assets'] |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         // Move the tests to tests/java, tests/res, etc... |  | ||||||
|         androidTest.setRoot('tests') |  | ||||||
| 
 |  | ||||||
|         // Move the build types to build-types/<type> |  | ||||||
|         // For instance, build-types/debug/java, build-types/debug/AndroidManifest.xml, ... |  | ||||||
|         // This moves them out of them default location under src/<type>/... which would |  | ||||||
|         // conflict with src/ being used by the main source set. |  | ||||||
|         // Adding new build types or product flavors should be accompanied |  | ||||||
|         // by a similar customization. |  | ||||||
|         debug.setRoot('build-types/debug') |  | ||||||
|         release.setRoot('build-types/release') |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @ -1,92 +0,0 @@ | |||||||
| <?xml version="1.0" encoding="UTF-8"?> |  | ||||||
| <project name="ownCloud Android library test cases" default="help"> |  | ||||||
| 
 |  | ||||||
|     <!-- The local.properties file is created and updated by the 'android' tool. |  | ||||||
|          It contains the path to the SDK. It should *NOT* be checked into |  | ||||||
|          Version Control Systems. --> |  | ||||||
|     <property file="local.properties" /> |  | ||||||
| 
 |  | ||||||
|     <!-- The ant.properties file can be created by you. It is only edited by the |  | ||||||
|          'android' tool to add properties to it. |  | ||||||
|          This is the place to change some Ant specific build properties. |  | ||||||
|          Here are some properties you may want to change/update: |  | ||||||
| 
 |  | ||||||
|          source.dir |  | ||||||
|              The name of the source directory. Default is 'src'. |  | ||||||
|          out.dir |  | ||||||
|              The name of the output directory. Default is 'bin'. |  | ||||||
| 
 |  | ||||||
|          For other overridable properties, look at the beginning of the rules |  | ||||||
|          files in the SDK, at tools/ant/build.xml |  | ||||||
| 
 |  | ||||||
|          Properties related to the SDK location or the project target should |  | ||||||
|          be updated using the 'android' tool with the 'update' action. |  | ||||||
| 
 |  | ||||||
|          This file is an integral part of the build system for your |  | ||||||
|          application and should be checked into Version Control Systems. |  | ||||||
| 
 |  | ||||||
|          --> |  | ||||||
|     <property file="ant.properties" /> |  | ||||||
| 
 |  | ||||||
|     <!-- if sdk.dir was not set from one of the property file, then |  | ||||||
|          get it from the ANDROID_HOME env var. |  | ||||||
|          This must be done before we load project.properties since |  | ||||||
|          the proguard config can use sdk.dir --> |  | ||||||
|     <property environment="env" /> |  | ||||||
|     <condition property="sdk.dir" value="${env.ANDROID_HOME}"> |  | ||||||
|         <isset property="env.ANDROID_HOME" /> |  | ||||||
|     </condition> |  | ||||||
| 
 |  | ||||||
|     <!-- The project.properties file is created and updated by the 'android' |  | ||||||
|          tool, as well as ADT. |  | ||||||
| 
 |  | ||||||
|          This contains project specific properties such as project target, and library |  | ||||||
|          dependencies. Lower level build properties are stored in ant.properties |  | ||||||
|          (or in .classpath for Eclipse projects). |  | ||||||
| 
 |  | ||||||
|          This file is an integral part of the build system for your |  | ||||||
|          application and should be checked into Version Control Systems. --> |  | ||||||
|     <loadproperties srcFile="project.properties" /> |  | ||||||
| 
 |  | ||||||
|     <!-- quick check on sdk.dir --> |  | ||||||
|     <fail |  | ||||||
|             message="sdk.dir is missing. Make sure to generate local.properties using 'android update project' or to inject it through the ANDROID_HOME environment variable." |  | ||||||
|             unless="sdk.dir" |  | ||||||
|     /> |  | ||||||
| 
 |  | ||||||
|     <!-- |  | ||||||
|         Import per project custom build rules if present at the root of the project. |  | ||||||
|         This is the place to put custom intermediary targets such as: |  | ||||||
|             -pre-build |  | ||||||
|             -pre-compile |  | ||||||
|             -post-compile (This is typically used for code obfuscation. |  | ||||||
|                            Compiled code location: ${out.classes.absolute.dir} |  | ||||||
|                            If this is not done in place, override ${out.dex.input.absolute.dir}) |  | ||||||
|             -post-package |  | ||||||
|             -post-build |  | ||||||
|             -pre-clean |  | ||||||
|     --> |  | ||||||
|     <import file="custom_rules.xml" optional="true" /> |  | ||||||
| 
 |  | ||||||
|     <!-- Import the actual build file. |  | ||||||
| 
 |  | ||||||
|          To customize existing targets, there are two options: |  | ||||||
|          - Customize only one target: |  | ||||||
|              - copy/paste the target into this file, *before* the |  | ||||||
|                <import> task. |  | ||||||
|              - customize it to your needs. |  | ||||||
|          - Customize the whole content of build.xml |  | ||||||
|              - copy/paste the content of the rules files (minus the top node) |  | ||||||
|                into this file, replacing the <import> task. |  | ||||||
|              - customize to your needs. |  | ||||||
| 
 |  | ||||||
|          *********************** |  | ||||||
|          ****** IMPORTANT ****** |  | ||||||
|          *********************** |  | ||||||
|          In all cases you must update the value of version-tag below to read 'custom' instead of an integer, |  | ||||||
|          in order to avoid having your file be overridden by tools such as "android update project" |  | ||||||
|     --> |  | ||||||
|     <!-- version-tag: 1 --> |  | ||||||
|     <import file="${sdk.dir}/tools/ant/build.xml" /> |  | ||||||
| 
 |  | ||||||
| </project> |  | ||||||
| @ -1,20 +0,0 @@ | |||||||
| <?xml version="1.0" encoding="UTF-8"?> |  | ||||||
| <project name="custom_rules"> |  | ||||||
| 	 |  | ||||||
| 	<!-- Run regular Android target 'test', but fails if any test is not successful --> |  | ||||||
| 	<target name="acceptance-test" depends="clean, debug, install" > |  | ||||||
| 		<property name="log.file" value="tests_output.txt" /> |  | ||||||
| 		<record name="${log.file}" action="start" /> |  | ||||||
| 		<antcall target="test" />	<!-- regular Android target -->  |  | ||||||
| 		<record name="${log.file}" action="stop" /> |  | ||||||
| 		<loadfile property="tests.output" srcFile="${log.file}" /> |  | ||||||
| 		<echo>Checking for failures</echo> |  | ||||||
| 		<fail message="Acceptance tests failed." > |  | ||||||
| 			<condition> |  | ||||||
| 				<contains string="${tests.output}" substring="FAILURES" /> |  | ||||||
| 			</condition> |  | ||||||
| 		</fail> |  | ||||||
| 		<echo>All tests passed.</echo> |  | ||||||
| 	</target> |  | ||||||
| 	 |  | ||||||
| </project> |  | ||||||
| @ -1,14 +0,0 @@ | |||||||
| # This file is automatically generated by Android Tools. |  | ||||||
| # Do not modify this file -- YOUR CHANGES WILL BE ERASED! |  | ||||||
| # |  | ||||||
| # This file must be checked in Version Control Systems. |  | ||||||
| # |  | ||||||
| # To customize properties used by the Ant build system edit |  | ||||||
| # "ant.properties", and override values to adapt the script to your |  | ||||||
| # project structure. |  | ||||||
| # |  | ||||||
| # To enable ProGuard to shrink and obfuscate your code, uncomment this (available properties: sdk.dir, user.home): |  | ||||||
| #proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt |  | ||||||
| 
 |  | ||||||
| # Project target |  | ||||||
| target=android-24 |  | ||||||
| Before Width: | Height: | Size: 9.2 KiB | 
| Before Width: | Height: | Size: 2.7 KiB | 
| Before Width: | Height: | Size: 5.1 KiB | 
| Before Width: | Height: | Size: 14 KiB | 
| @ -1,30 +0,0 @@ | |||||||
| <?xml version="1.0" encoding="utf-8"?> |  | ||||||
| <!--  ownCloud Android Library is available under MIT license |  | ||||||
|    Copyright (C) 2016 ownCloud GmbH. |  | ||||||
|      |  | ||||||
|    Permission is hereby granted, free of charge, to any person obtaining a copy |  | ||||||
|    of this software and associated documentation files (the "Software"), to deal |  | ||||||
|    in the Software without restriction, including without limitation the rights |  | ||||||
|    to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |  | ||||||
|    copies of the Software, and to permit persons to whom the Software is |  | ||||||
|    furnished to do so, subject to the following conditions: |  | ||||||
|     |  | ||||||
|    The above copyright notice and this permission notice shall be included in |  | ||||||
|    all copies or substantial portions of the Software. |  | ||||||
|     |  | ||||||
|    THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,  |  | ||||||
|    EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |  | ||||||
|    MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND  |  | ||||||
|    NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS  |  | ||||||
|    BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN  |  | ||||||
|    ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN  |  | ||||||
|    CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |  | ||||||
|    THE SOFTWARE. |  | ||||||
| 
 |  | ||||||
|  --> |  | ||||||
|   |  | ||||||
| <resources> |  | ||||||
| 
 |  | ||||||
|     <string name="app_name">Oc_framework-testTest</string> |  | ||||||
| 
 |  | ||||||
| </resources> |  | ||||||
| @ -1,455 +0,0 @@ | |||||||
| /* ownCloud Android Library is available under MIT license |  | ||||||
|  *   Copyright (C) 2016 ownCloud GmbH. |  | ||||||
|  *    |  | ||||||
|  *   Permission is hereby granted, free of charge, to any person obtaining a copy |  | ||||||
|  *   of this software and associated documentation files (the "Software"), to deal |  | ||||||
|  *   in the Software without restriction, including without limitation the rights |  | ||||||
|  *   to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |  | ||||||
|  *   copies of the Software, and to permit persons to whom the Software is |  | ||||||
|  *   furnished to do so, subject to the following conditions: |  | ||||||
|  *    |  | ||||||
|  *   The above copyright notice and this permission notice shall be included in |  | ||||||
|  *   all copies or substantial portions of the Software. |  | ||||||
|  *    |  | ||||||
|  *   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,  |  | ||||||
|  *   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |  | ||||||
|  *   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND  |  | ||||||
|  *   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS  |  | ||||||
|  *   BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN  |  | ||||||
|  *   ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN  |  | ||||||
|  *   CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |  | ||||||
|  *   THE SOFTWARE. |  | ||||||
|  * |  | ||||||
|  */ |  | ||||||
| 
 |  | ||||||
| package com.owncloud.android.lib.test_project.test; |  | ||||||
| 
 |  | ||||||
| import android.content.Context; |  | ||||||
| import android.net.Uri; |  | ||||||
| import android.test.ActivityInstrumentationTestCase2; |  | ||||||
| import android.util.Log; |  | ||||||
| 
 |  | ||||||
| import com.owncloud.android.lib.common.OwnCloudClient; |  | ||||||
| import com.owncloud.android.lib.common.OwnCloudClientFactory; |  | ||||||
| import com.owncloud.android.lib.common.authentication.OwnCloudCredentialsFactory; |  | ||||||
| import com.owncloud.android.lib.common.network.NetworkUtils; |  | ||||||
| import com.owncloud.android.lib.common.operations.RemoteOperationResult; |  | ||||||
| import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode; |  | ||||||
| import com.owncloud.android.lib.resources.files.CopyRemoteFileOperation; |  | ||||||
| import com.owncloud.android.lib.test_project.R; |  | ||||||
| import com.owncloud.android.lib.test_project.TestActivity; |  | ||||||
| 
 |  | ||||||
| import junit.framework.AssertionFailedError; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| import java.io.File; |  | ||||||
| import java.security.GeneralSecurityException; |  | ||||||
| 
 |  | ||||||
| //import android.test.AndroidTestCase; |  | ||||||
| 
 |  | ||||||
| /** |  | ||||||
|  * Class to test CopyRemoteFileOperation |  | ||||||
|  * <p/> |  | ||||||
|  * With this TestCase we are experimenting a bit to improve the test suite design, in two aspects: |  | ||||||
|  * <p/> |  | ||||||
|  * - Reduce the dependency from the set of test cases on the "test project" needed to |  | ||||||
|  * have an instrumented APK to install in the device, as required by the testing framework |  | ||||||
|  * provided by Android. To get there, this class avoids calling TestActivity methods in the test |  | ||||||
|  * method. |  | ||||||
|  * <p/> |  | ||||||
|  * - Reduce the impact of creating a remote fixture over the Internet, while the structure of the |  | ||||||
|  * TestCase is kept easy to maintain. To get this, all the tests are done in a single test method, |  | ||||||
|  * granting this way that setUp and tearDown are run only once. |  | ||||||
|  * |  | ||||||
|  * @author David A. Velasco |  | ||||||
|  */ |  | ||||||
| 
 |  | ||||||
| //public class CopyFileTest extends AndroidTestCase { |  | ||||||
| public class CopyFileTest extends ActivityInstrumentationTestCase2<TestActivity> { |  | ||||||
| 
 |  | ||||||
|     private static final String LOG_TAG = CopyFileTest.class.getCanonicalName(); |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
|     /// Paths to files and folders in fixture |  | ||||||
| 
 |  | ||||||
|     private static final String SRC_BASE_FOLDER = "/src/"; |  | ||||||
|     private static final String TARGET_BASE_FOLDER = "/target/"; |  | ||||||
|     private static final String NO_FILE = "nofile.txt"; |  | ||||||
|     private static final String FILE1 = "file1.txt"; |  | ||||||
|     private static final String FILE2 = "file2.txt"; |  | ||||||
|     private static final String FILE3 = "file3.txt"; |  | ||||||
|     private static final String FILE4 = "file4.txt"; |  | ||||||
|     private static final String FILE5 = "file5.txt"; |  | ||||||
|     private static final String FILE6 = "file6.txt"; |  | ||||||
|     private static final String FILE7 = "file7.txt"; |  | ||||||
|     private static final String EMPTY = "empty/"; |  | ||||||
|     private static final String NO_FOLDER = "nofolder/"; |  | ||||||
|     private static final String FOLDER1 = "folder1/"; |  | ||||||
|     private static final String FOLDER2 = "folder2/"; |  | ||||||
|     private static final String FOLDER3 = "folder3/"; |  | ||||||
|     private static final String FOLDER4 = "folder4/"; |  | ||||||
| 
 |  | ||||||
|     private static final String SRC_PATH_TO_FILE_1 = SRC_BASE_FOLDER + FILE1; |  | ||||||
|     private static final String TARGET_PATH_TO_FILE_1 = TARGET_BASE_FOLDER + FILE1; |  | ||||||
| 
 |  | ||||||
|     private static final String SRC_PATH_TO_FILE_2 = SRC_BASE_FOLDER + FILE2; |  | ||||||
|     private static final String TARGET_PATH_TO_FILE_2_RENAMED = |  | ||||||
|             TARGET_BASE_FOLDER + "renamed_" + FILE2; |  | ||||||
| 
 |  | ||||||
|     private static final String SRC_PATH_TO_FILE_3 = SRC_BASE_FOLDER + FILE3; |  | ||||||
|     private static final String SRC_PATH_TO_FILE_3_RENAMED = SRC_BASE_FOLDER + "renamed_" + FILE3; |  | ||||||
| 
 |  | ||||||
|     private static final String SRC_PATH_TO_FILE_4 = SRC_BASE_FOLDER + FILE4; |  | ||||||
| 
 |  | ||||||
|     private static final String SRC_PATH_TO_FILE_5 = SRC_BASE_FOLDER + FILE5; |  | ||||||
| 
 |  | ||||||
|     private static final String SRC_PATH_TO_FILE_6 = SRC_BASE_FOLDER + FILE6; |  | ||||||
| 
 |  | ||||||
|     private static final String SRC_PATH_TO_NON_EXISTENT_FILE = SRC_BASE_FOLDER + NO_FILE; |  | ||||||
| 
 |  | ||||||
|     private static final String SRC_PATH_TO_EMPTY_FOLDER = SRC_BASE_FOLDER + EMPTY; |  | ||||||
|     private static final String TARGET_PATH_TO_EMPTY_FOLDER = TARGET_BASE_FOLDER + EMPTY; |  | ||||||
| 
 |  | ||||||
|     private static final String SRC_PATH_TO_FULL_FOLDER_1 = SRC_BASE_FOLDER + FOLDER1; |  | ||||||
|     private static final String TARGET_PATH_TO_FULL_FOLDER_1 = TARGET_BASE_FOLDER + FOLDER1; |  | ||||||
| 
 |  | ||||||
|     private static final String SRC_PATH_TO_FULL_FOLDER_2 = SRC_BASE_FOLDER + FOLDER2; |  | ||||||
| 
 |  | ||||||
|     private static final String TARGET_PATH_TO_FULL_FOLDER_2_RENAMED = |  | ||||||
|             TARGET_BASE_FOLDER + "renamed_" + FOLDER2; |  | ||||||
| 
 |  | ||||||
|     private static final String SRC_PATH_TO_FULL_FOLDER_3 = SRC_BASE_FOLDER + FOLDER3; |  | ||||||
|     private static final String SRC_PATH_TO_FULL_FOLDER_4 = SRC_BASE_FOLDER + FOLDER4; |  | ||||||
| 
 |  | ||||||
|     private static final String SRC_PATH_TO_FULL_FOLDER_3_RENAMED = |  | ||||||
|             SRC_BASE_FOLDER + "renamed_" + FOLDER3; |  | ||||||
| 
 |  | ||||||
|     private static final String TARGET_PATH_RENAMED_WITH_INVALID_CHARS = |  | ||||||
|             SRC_BASE_FOLDER + "renamed:??_" + FILE6; |  | ||||||
| 
 |  | ||||||
|     private static final String TARGET_PATH_TO_ALREADY_EXISTENT_EMPTY_FOLDER_4 = TARGET_BASE_FOLDER |  | ||||||
|             + FOLDER4; |  | ||||||
| 
 |  | ||||||
|     private static final String TARGET_PATH_TO_NON_EXISTENT_FILE = TARGET_BASE_FOLDER + NO_FILE; |  | ||||||
| 
 |  | ||||||
|     private static final String TARGET_PATH_TO_FILE_5_INTO_NON_EXISTENT_FOLDER = |  | ||||||
|             TARGET_BASE_FOLDER + NO_FOLDER + FILE5; |  | ||||||
| 
 |  | ||||||
|     private static final String TARGET_PATH_TO_ALREADY_EXISTENT_FILE_7 = TARGET_BASE_FOLDER + FILE7; |  | ||||||
| 
 |  | ||||||
|     private static final String[] FOLDERS_IN_FIXTURE = { |  | ||||||
|             SRC_PATH_TO_EMPTY_FOLDER, |  | ||||||
| 
 |  | ||||||
|             SRC_PATH_TO_FULL_FOLDER_1, |  | ||||||
|             SRC_PATH_TO_FULL_FOLDER_1 + FOLDER1, |  | ||||||
|             SRC_PATH_TO_FULL_FOLDER_1 + FOLDER2, |  | ||||||
|             SRC_PATH_TO_FULL_FOLDER_1 + FOLDER2 + FOLDER1, |  | ||||||
|             SRC_PATH_TO_FULL_FOLDER_1 + FOLDER2 + FOLDER2, |  | ||||||
| 
 |  | ||||||
|             SRC_PATH_TO_FULL_FOLDER_2, |  | ||||||
|             SRC_PATH_TO_FULL_FOLDER_2 + FOLDER1, |  | ||||||
|             SRC_PATH_TO_FULL_FOLDER_2 + FOLDER2, |  | ||||||
|             SRC_PATH_TO_FULL_FOLDER_2 + FOLDER2 + FOLDER1, |  | ||||||
|             SRC_PATH_TO_FULL_FOLDER_2 + FOLDER2 + FOLDER2, |  | ||||||
| 
 |  | ||||||
|             SRC_PATH_TO_FULL_FOLDER_3, |  | ||||||
|             SRC_PATH_TO_FULL_FOLDER_3 + FOLDER1, |  | ||||||
|             SRC_PATH_TO_FULL_FOLDER_3 + FOLDER2, |  | ||||||
|             SRC_PATH_TO_FULL_FOLDER_3 + FOLDER2 + FOLDER1, |  | ||||||
|             SRC_PATH_TO_FULL_FOLDER_3 + FOLDER2 + FOLDER2, |  | ||||||
| 
 |  | ||||||
|             SRC_PATH_TO_FULL_FOLDER_4, |  | ||||||
|             SRC_PATH_TO_FULL_FOLDER_4 + FOLDER1, |  | ||||||
|             SRC_PATH_TO_FULL_FOLDER_4 + FOLDER2, |  | ||||||
|             SRC_PATH_TO_FULL_FOLDER_4 + FOLDER2 + FOLDER1, |  | ||||||
|             SRC_PATH_TO_FULL_FOLDER_4 + FOLDER2 + FOLDER2, |  | ||||||
| 
 |  | ||||||
|             TARGET_BASE_FOLDER, |  | ||||||
|             TARGET_PATH_TO_ALREADY_EXISTENT_EMPTY_FOLDER_4 |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
|     private static final String[] FILES_IN_FIXTURE = { |  | ||||||
|             SRC_PATH_TO_FILE_1, |  | ||||||
|             SRC_PATH_TO_FILE_2, |  | ||||||
|             SRC_PATH_TO_FILE_3, |  | ||||||
|             SRC_PATH_TO_FILE_4, |  | ||||||
|             SRC_PATH_TO_FILE_5, |  | ||||||
| 
 |  | ||||||
|             SRC_PATH_TO_FULL_FOLDER_1 + FILE1, |  | ||||||
|             SRC_PATH_TO_FULL_FOLDER_1 + FOLDER2 + FILE1, |  | ||||||
|             SRC_PATH_TO_FULL_FOLDER_1 + FOLDER2 + FILE2, |  | ||||||
|             SRC_PATH_TO_FULL_FOLDER_1 + FOLDER2 + FOLDER2 + FILE2, |  | ||||||
| 
 |  | ||||||
|             SRC_PATH_TO_FULL_FOLDER_2 + FILE1, |  | ||||||
|             SRC_PATH_TO_FULL_FOLDER_2 + FOLDER2 + FILE1, |  | ||||||
|             SRC_PATH_TO_FULL_FOLDER_2 + FOLDER2 + FILE2, |  | ||||||
|             SRC_PATH_TO_FULL_FOLDER_2 + FOLDER2 + FOLDER2 + FILE2, |  | ||||||
| 
 |  | ||||||
|             SRC_PATH_TO_FULL_FOLDER_3 + FILE1, |  | ||||||
|             SRC_PATH_TO_FULL_FOLDER_3 + FOLDER2 + FILE1, |  | ||||||
|             SRC_PATH_TO_FULL_FOLDER_3 + FOLDER2 + FILE2, |  | ||||||
|             SRC_PATH_TO_FULL_FOLDER_3 + FOLDER2 + FOLDER2 + FILE2, |  | ||||||
| 
 |  | ||||||
|             SRC_PATH_TO_FULL_FOLDER_4 + FILE1, |  | ||||||
|             SRC_PATH_TO_FULL_FOLDER_4 + FOLDER2 + FILE1, |  | ||||||
|             SRC_PATH_TO_FULL_FOLDER_4 + FOLDER2 + FILE2, |  | ||||||
|             SRC_PATH_TO_FULL_FOLDER_4 + FOLDER2 + FOLDER2 + FILE2, |  | ||||||
| 
 |  | ||||||
|             TARGET_PATH_TO_ALREADY_EXISTENT_FILE_7 |  | ||||||
|     }; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
|     String mServerUri, mUser, mPass; |  | ||||||
|     OwnCloudClient mClient = null; |  | ||||||
| 
 |  | ||||||
|     public CopyFileTest() { |  | ||||||
|         super(TestActivity.class); |  | ||||||
| 
 |  | ||||||
|         Protocol pr = Protocol.getProtocol("https"); |  | ||||||
|         if (pr == null || !(pr.getSocketFactory() instanceof SelfSignedConfidentSslSocketFactory)) { |  | ||||||
|             try { |  | ||||||
|                 ProtocolSocketFactory psf = new SelfSignedConfidentSslSocketFactory(); |  | ||||||
|                 Protocol.registerProtocol( |  | ||||||
|                         "https", |  | ||||||
|                         new Protocol("https", psf, 443)); |  | ||||||
| 
 |  | ||||||
|             } catch (GeneralSecurityException e) { |  | ||||||
|                 throw new AssertionFailedError( |  | ||||||
|                         "Self-signed confident SSL context could not be loaded"); |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
|     protected Context getContext() { |  | ||||||
|         return getActivity(); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     @Override |  | ||||||
|     protected void setUp() throws Exception { |  | ||||||
|         super.setUp(); |  | ||||||
| 
 |  | ||||||
|         // Next initialization cannot be done in the constructor because getContext() is not |  | ||||||
|         // ready yet, returns NULL. |  | ||||||
|         initAccessToServer(getContext()); |  | ||||||
| 
 |  | ||||||
|         Log.v(LOG_TAG, "Setting up the remote fixture..."); |  | ||||||
| 
 |  | ||||||
|         RemoteOperationResult result = null; |  | ||||||
|         for (String folderPath : FOLDERS_IN_FIXTURE) { |  | ||||||
|             result = TestActivity.createFolder(folderPath, true, mClient); |  | ||||||
|             if (!result.isSuccess()) { |  | ||||||
|                 Utils.logAndThrow(LOG_TAG, result); |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         File txtFile = TestActivity.extractAsset( |  | ||||||
|                 TestActivity.ASSETS__TEXT_FILE_NAME, getContext() |  | ||||||
|         ); |  | ||||||
|         for (String filePath : FILES_IN_FIXTURE) { |  | ||||||
|             result = TestActivity.uploadFile( |  | ||||||
|                     txtFile.getAbsolutePath(), filePath, "txt/plain", mClient |  | ||||||
|             ); |  | ||||||
|             if (!result.isSuccess()) { |  | ||||||
|                 Utils.logAndThrow(LOG_TAG, result); |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         Log.v(LOG_TAG, "Remote fixture created."); |  | ||||||
| 
 |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
|     /** |  | ||||||
|      * Test copy folder |  | ||||||
|      */ |  | ||||||
|     public void testCopyRemoteFileOperation() { |  | ||||||
|         Log.v(LOG_TAG, "testCopyFolder in"); |  | ||||||
| 
 |  | ||||||
|         /// successful cases |  | ||||||
| 
 |  | ||||||
|         // copy file |  | ||||||
|         CopyRemoteFileOperation copyOperation = new CopyRemoteFileOperation( |  | ||||||
|                 SRC_PATH_TO_FILE_1, |  | ||||||
|                 TARGET_PATH_TO_FILE_1, |  | ||||||
|                 false |  | ||||||
|         ); |  | ||||||
|         RemoteOperationResult result = copyOperation.execute(mClient); |  | ||||||
|         assertTrue(result.isSuccess()); |  | ||||||
| 
 |  | ||||||
|         // copy & rename file, different location |  | ||||||
|         copyOperation = new CopyRemoteFileOperation( |  | ||||||
|                 SRC_PATH_TO_FILE_2, |  | ||||||
|                 TARGET_PATH_TO_FILE_2_RENAMED, |  | ||||||
|                 false |  | ||||||
|         ); |  | ||||||
|         result = copyOperation.execute(mClient); |  | ||||||
|         assertTrue(result.isSuccess()); |  | ||||||
| 
 |  | ||||||
|         // copy & rename file, same location (rename file) |  | ||||||
|         copyOperation = new CopyRemoteFileOperation( |  | ||||||
|                 SRC_PATH_TO_FILE_3, |  | ||||||
|                 SRC_PATH_TO_FILE_3_RENAMED, |  | ||||||
|                 false |  | ||||||
|         ); |  | ||||||
|         result = copyOperation.execute(mClient); |  | ||||||
|         assertTrue(result.isSuccess()); |  | ||||||
| 
 |  | ||||||
|         // copy empty folder |  | ||||||
|         copyOperation = new CopyRemoteFileOperation( |  | ||||||
|                 SRC_PATH_TO_EMPTY_FOLDER, |  | ||||||
|                 TARGET_PATH_TO_EMPTY_FOLDER, |  | ||||||
|                 false |  | ||||||
|         ); |  | ||||||
|         result = copyOperation.execute(mClient); |  | ||||||
|         assertTrue(result.isSuccess()); |  | ||||||
| 
 |  | ||||||
|         // copy non-empty folder |  | ||||||
|         copyOperation = new CopyRemoteFileOperation( |  | ||||||
|                 SRC_PATH_TO_FULL_FOLDER_1, |  | ||||||
|                 TARGET_PATH_TO_FULL_FOLDER_1, |  | ||||||
|                 false |  | ||||||
|         ); |  | ||||||
|         result = copyOperation.execute(mClient); |  | ||||||
|         assertTrue(result.isSuccess()); |  | ||||||
| 
 |  | ||||||
|         // copy & rename folder, different location |  | ||||||
|         copyOperation = new CopyRemoteFileOperation( |  | ||||||
|                 SRC_PATH_TO_FULL_FOLDER_2, |  | ||||||
|                 TARGET_PATH_TO_FULL_FOLDER_2_RENAMED, |  | ||||||
|                 false |  | ||||||
|         ); |  | ||||||
|         result = copyOperation.execute(mClient); |  | ||||||
|         assertTrue(result.isSuccess()); |  | ||||||
| 
 |  | ||||||
|         // copy & rename folder, same location (rename folder) |  | ||||||
|         copyOperation = new CopyRemoteFileOperation( |  | ||||||
|                 SRC_PATH_TO_FULL_FOLDER_3, |  | ||||||
|                 SRC_PATH_TO_FULL_FOLDER_3_RENAMED, |  | ||||||
|                 false |  | ||||||
|         ); |  | ||||||
|         result = copyOperation.execute(mClient); |  | ||||||
|         assertTrue(result.isSuccess()); |  | ||||||
| 
 |  | ||||||
|         // copy for nothing (success, but no interaction with network) |  | ||||||
|         copyOperation = new CopyRemoteFileOperation( |  | ||||||
|                 SRC_PATH_TO_FILE_4, |  | ||||||
|                 SRC_PATH_TO_FILE_4, |  | ||||||
|                 false |  | ||||||
|         ); |  | ||||||
|         result = copyOperation.execute(mClient); |  | ||||||
|         assertTrue(result.isSuccess()); |  | ||||||
| 
 |  | ||||||
|         // copy overwriting |  | ||||||
|         copyOperation = new CopyRemoteFileOperation( |  | ||||||
|                 SRC_PATH_TO_FULL_FOLDER_4, |  | ||||||
|                 TARGET_PATH_TO_ALREADY_EXISTENT_EMPTY_FOLDER_4, |  | ||||||
|                 true |  | ||||||
|         ); |  | ||||||
|         result = copyOperation.execute(mClient); |  | ||||||
|         assertTrue(result.isSuccess()); |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
|         /// Failed cases |  | ||||||
| 
 |  | ||||||
|         // file to copy does not exist |  | ||||||
|         copyOperation = new CopyRemoteFileOperation( |  | ||||||
|                 SRC_PATH_TO_NON_EXISTENT_FILE, |  | ||||||
|                 TARGET_PATH_TO_NON_EXISTENT_FILE, |  | ||||||
|                 false |  | ||||||
|         ); |  | ||||||
|         result = copyOperation.execute(mClient); |  | ||||||
|         assertTrue(result.getCode() == ResultCode.FILE_NOT_FOUND); |  | ||||||
| 
 |  | ||||||
|         // folder to copy into does no exist |  | ||||||
|         copyOperation = new CopyRemoteFileOperation( |  | ||||||
|                 SRC_PATH_TO_FILE_5, |  | ||||||
|                 TARGET_PATH_TO_FILE_5_INTO_NON_EXISTENT_FOLDER, |  | ||||||
|                 false |  | ||||||
|         ); |  | ||||||
|         result = copyOperation.execute(mClient); |  | ||||||
|         assertTrue(result.getHttpCode() == HttpConstants.HTTP_CONFLICT); |  | ||||||
| 
 |  | ||||||
|         // target location (renaming) has invalid characters |  | ||||||
|         copyOperation = new CopyRemoteFileOperation( |  | ||||||
|                 SRC_PATH_TO_FILE_6, |  | ||||||
|                 TARGET_PATH_RENAMED_WITH_INVALID_CHARS, |  | ||||||
|                 false |  | ||||||
|         ); |  | ||||||
|         result = copyOperation.execute(mClient); |  | ||||||
|         assertTrue(result.getCode() == ResultCode.INVALID_CHARACTER_IN_NAME); |  | ||||||
| 
 |  | ||||||
|         // name collision |  | ||||||
|         copyOperation = new CopyRemoteFileOperation( |  | ||||||
|                 SRC_PATH_TO_FILE_1, |  | ||||||
|                 TARGET_PATH_TO_ALREADY_EXISTENT_FILE_7, |  | ||||||
|                 false |  | ||||||
|         ); |  | ||||||
|         result = copyOperation.execute(mClient); |  | ||||||
|         assertTrue(result.getCode() == ResultCode.INVALID_OVERWRITE); |  | ||||||
| 
 |  | ||||||
|         // copy a folder into a descendant |  | ||||||
|         copyOperation = new CopyRemoteFileOperation( |  | ||||||
|                 SRC_BASE_FOLDER, |  | ||||||
|                 SRC_PATH_TO_EMPTY_FOLDER, |  | ||||||
|                 false |  | ||||||
|         ); |  | ||||||
|         result = copyOperation.execute(mClient); |  | ||||||
|         assertTrue(result.getCode() == ResultCode.INVALID_COPY_INTO_DESCENDANT); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     @Override |  | ||||||
|     protected void tearDown() throws Exception { |  | ||||||
|         Log.v(LOG_TAG, "Deleting remote fixture..."); |  | ||||||
| 
 |  | ||||||
|         String[] mPathsToCleanUp = { |  | ||||||
|                 SRC_BASE_FOLDER, |  | ||||||
|                 TARGET_BASE_FOLDER |  | ||||||
|         }; |  | ||||||
| 
 |  | ||||||
|         for (String path : mPathsToCleanUp) { |  | ||||||
|             RemoteOperationResult removeResult = |  | ||||||
|                     TestActivity.removeFile(path, mClient); |  | ||||||
|             if (!removeResult.isSuccess() && removeResult.getCode() != ResultCode.TIMEOUT) { |  | ||||||
|                 Utils.logAndThrow(LOG_TAG, removeResult); |  | ||||||
|             } |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         super.tearDown(); |  | ||||||
| 
 |  | ||||||
|         Log.v(LOG_TAG, "Remote fixture delete."); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
|     private void initAccessToServer(Context context) { |  | ||||||
|         Log.v(LOG_TAG, "Setting up client instance to access OC server..."); |  | ||||||
| 
 |  | ||||||
|         mServerUri = context.getString(R.string.server_base_url); |  | ||||||
|         mUser = context.getString(R.string.username); |  | ||||||
|         mPass = context.getString(R.string.password); |  | ||||||
| 
 |  | ||||||
|         mClient = new OwnCloudClient( |  | ||||||
|                 Uri.parse(mServerUri), |  | ||||||
|                 NetworkUtils.getMultiThreadedConnManager() |  | ||||||
|         ); |  | ||||||
|         mClient.setDefaultTimeouts( |  | ||||||
|                 OwnCloudClientFactory.DEFAULT_DATA_TIMEOUT, |  | ||||||
|                 OwnCloudClientFactory.DEFAULT_CONNECTION_TIMEOUT); |  | ||||||
|         mClient.setFollowRedirects(true); |  | ||||||
|         mClient.setCredentials( |  | ||||||
|                 OwnCloudCredentialsFactory.newBasicCredentials( |  | ||||||
|                         mUser, |  | ||||||
|                         mPass |  | ||||||
|                 ) |  | ||||||
|         ); |  | ||||||
| 
 |  | ||||||
|         Log.v(LOG_TAG, "Client instance set up."); |  | ||||||
| 
 |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| } |  | ||||||
| @ -1,133 +0,0 @@ | |||||||
| /* ownCloud Android Library is available under MIT license |  | ||||||
|  *   Copyright (C) 2016 ownCloud GmbH. |  | ||||||
|  *    |  | ||||||
|  *   Permission is hereby granted, free of charge, to any person obtaining a copy |  | ||||||
|  *   of this software and associated documentation files (the "Software"), to deal |  | ||||||
|  *   in the Software without restriction, including without limitation the rights |  | ||||||
|  *   to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |  | ||||||
|  *   copies of the Software, and to permit persons to whom the Software is |  | ||||||
|  *   furnished to do so, subject to the following conditions: |  | ||||||
|  *    |  | ||||||
|  *   The above copyright notice and this permission notice shall be included in |  | ||||||
|  *   all copies or substantial portions of the Software. |  | ||||||
|  *    |  | ||||||
|  *   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,  |  | ||||||
|  *   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |  | ||||||
|  *   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND  |  | ||||||
|  *   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS  |  | ||||||
|  *   BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN  |  | ||||||
|  *   ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN  |  | ||||||
|  *   CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |  | ||||||
|  *   THE SOFTWARE. |  | ||||||
|  * |  | ||||||
|  */ |  | ||||||
| package com.owncloud.android.lib.test_project.test; |  | ||||||
| 
 |  | ||||||
| import java.util.ArrayList; |  | ||||||
| import java.util.Iterator; |  | ||||||
| import java.util.List; |  | ||||||
| 
 |  | ||||||
| import com.owncloud.android.lib.common.operations.RemoteOperationResult; |  | ||||||
| import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode; |  | ||||||
| import com.owncloud.android.lib.test_project.TestActivity; |  | ||||||
| 
 |  | ||||||
| /** |  | ||||||
|  * Class to test Create Folder Operation |  | ||||||
|  * @author masensio |  | ||||||
|  * @author David A. Velasco |  | ||||||
|  * |  | ||||||
|  */ |  | ||||||
| public class CreateFolderTest extends RemoteTest { |  | ||||||
| 
 |  | ||||||
| 	 |  | ||||||
| 	private static final String LOG_TAG = CreateFolderTest.class.getCanonicalName(); |  | ||||||
| 
 |  | ||||||
| 	private static final String FOLDER_PATH_BASE = "/testCreateFolder"; |  | ||||||
| 
 |  | ||||||
| 	private TestActivity mActivity; |  | ||||||
| 	private List<String> mCreatedFolderPaths; |  | ||||||
| 	private String mFullPath2FolderBase;  |  | ||||||
| 	 |  | ||||||
| 	public CreateFolderTest() { |  | ||||||
| 	    super(); |  | ||||||
| 		mCreatedFolderPaths = new ArrayList<String>(); |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 	@Override |  | ||||||
| 	  protected void setUp() throws Exception { |  | ||||||
| 	    super.setUp(); |  | ||||||
| 	    mActivity = getActivity(); |  | ||||||
| 	    mCreatedFolderPaths.clear(); |  | ||||||
| 		mFullPath2FolderBase = mBaseFolderPath + FOLDER_PATH_BASE;  |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 	/** |  | ||||||
| 	 * Test Create Folder |  | ||||||
| 	 */ |  | ||||||
| 	public void testCreateFolder() { |  | ||||||
| 		String remotePath = mFullPath2FolderBase; |  | ||||||
| 		mCreatedFolderPaths.add(remotePath); |  | ||||||
| 		RemoteOperationResult result =  mActivity.createFolder(remotePath, true); |  | ||||||
| 		assertTrue(result.isSuccess() || result.getCode() == ResultCode.TIMEOUT); |  | ||||||
| 		 |  | ||||||
| 		// Create Subfolder |  | ||||||
| 		remotePath = mFullPath2FolderBase + FOLDER_PATH_BASE; |  | ||||||
| 		mCreatedFolderPaths.add(remotePath); |  | ||||||
| 		result =  mActivity.createFolder(remotePath, true); |  | ||||||
| 		assertTrue(result.isSuccess() || result.getCode() == ResultCode.TIMEOUT); |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 	 |  | ||||||
| 	/** |  | ||||||
| 	 * Test to Create Folder with special characters: /  \  < >  :  "  |  ?  * |  | ||||||
| 	 */ |  | ||||||
| 	public void testCreateFolderSpecialCharacters() {		 |  | ||||||
| 		 |  | ||||||
| 		String remotePath = mFullPath2FolderBase + "_\\"; |  | ||||||
| 		RemoteOperationResult result =  mActivity.createFolder(remotePath, true); |  | ||||||
| 		assertTrue(result.getCode() == ResultCode.INVALID_CHARACTER_IN_NAME); |  | ||||||
| 		 |  | ||||||
| 		remotePath = mFullPath2FolderBase + "_<";		 |  | ||||||
| 		result =  mActivity.createFolder(remotePath, true); |  | ||||||
| 		assertTrue(result.getCode() == ResultCode.INVALID_CHARACTER_IN_NAME); |  | ||||||
| 		 |  | ||||||
| 		remotePath = mFullPath2FolderBase + "_>";		 |  | ||||||
| 		result =  mActivity.createFolder(remotePath, true); |  | ||||||
| 		assertTrue(result.getCode() == ResultCode.INVALID_CHARACTER_IN_NAME); |  | ||||||
| 		 |  | ||||||
| 		remotePath = mFullPath2FolderBase + "_:";		 |  | ||||||
| 		result =  mActivity.createFolder(remotePath, true); |  | ||||||
| 		assertTrue(result.getCode() == ResultCode.INVALID_CHARACTER_IN_NAME); |  | ||||||
| 		 |  | ||||||
| 		remotePath = mFullPath2FolderBase + "_\"";		 |  | ||||||
| 		result =  mActivity.createFolder(remotePath, true); |  | ||||||
| 		assertTrue(result.getCode() == ResultCode.INVALID_CHARACTER_IN_NAME); |  | ||||||
| 		 |  | ||||||
| 		remotePath = mFullPath2FolderBase + "_|";		 |  | ||||||
| 		result =  mActivity.createFolder(remotePath, true); |  | ||||||
| 		assertTrue(result.getCode() == ResultCode.INVALID_CHARACTER_IN_NAME); |  | ||||||
| 		 |  | ||||||
| 		remotePath = mFullPath2FolderBase + "_?";		 |  | ||||||
| 		result =  mActivity.createFolder(remotePath, true); |  | ||||||
| 		assertTrue(result.getCode() == ResultCode.INVALID_CHARACTER_IN_NAME); |  | ||||||
| 		 |  | ||||||
| 		remotePath = mFullPath2FolderBase + "_*";		 |  | ||||||
| 		result =  mActivity.createFolder(remotePath, true); |  | ||||||
| 		assertTrue(result.getCode() == ResultCode.INVALID_CHARACTER_IN_NAME); |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 	@Override |  | ||||||
| 	protected void tearDown() throws Exception { |  | ||||||
| 		Iterator<String> it = mCreatedFolderPaths.iterator(); |  | ||||||
| 		RemoteOperationResult removeResult = null; |  | ||||||
| 		while (it.hasNext()) { |  | ||||||
| 			removeResult = mActivity.removeFile(it.next()); |  | ||||||
| 			if (!removeResult.isSuccess() && removeResult.getCode() != ResultCode.TIMEOUT) { |  | ||||||
| 				Utils.logAndThrow(LOG_TAG, removeResult); |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 		super.tearDown(); |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| } |  | ||||||
| @ -1,310 +0,0 @@ | |||||||
| /* ownCloud Android Library is available under MIT license |  | ||||||
|  *   Copyright (C) 2016 ownCloud GmbH. |  | ||||||
|  *    |  | ||||||
|  *   Permission is hereby granted, free of charge, to any person obtaining a copy |  | ||||||
|  *   of this software and associated documentation files (the "Software"), to deal |  | ||||||
|  *   in the Software without restriction, including without limitation the rights |  | ||||||
|  *   to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |  | ||||||
|  *   copies of the Software, and to permit persons to whom the Software is |  | ||||||
|  *   furnished to do so, subject to the following conditions: |  | ||||||
|  *    |  | ||||||
|  *   The above copyright notice and this permission notice shall be included in |  | ||||||
|  *   all copies or substantial portions of the Software. |  | ||||||
|  *    |  | ||||||
|  *   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,  |  | ||||||
|  *   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |  | ||||||
|  *   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND  |  | ||||||
|  *   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS  |  | ||||||
|  *   BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN  |  | ||||||
|  *   ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN  |  | ||||||
|  *   CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |  | ||||||
|  *   THE SOFTWARE. |  | ||||||
|  * |  | ||||||
|  */ |  | ||||||
| 
 |  | ||||||
| package com.owncloud.android.lib.test_project.test; |  | ||||||
| 
 |  | ||||||
| import java.io.File; |  | ||||||
| 
 |  | ||||||
| import com.owncloud.android.lib.common.operations.RemoteOperationResult; |  | ||||||
| import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode; |  | ||||||
| import com.owncloud.android.lib.resources.shares.ShareType; |  | ||||||
| import com.owncloud.android.lib.test_project.R; |  | ||||||
| import com.owncloud.android.lib.test_project.TestActivity; |  | ||||||
| 
 |  | ||||||
| /** |  | ||||||
|  * Test Create Share: the server must support SHARE API |  | ||||||
|  */ |  | ||||||
| public class CreateShareTest extends RemoteTest { |  | ||||||
| 
 |  | ||||||
| 	private static final String LOG_TAG = CreateShareTest.class.getCanonicalName(); |  | ||||||
| 	 |  | ||||||
| 	/* File to share.*/ |  | ||||||
| 	private static final String FILE_TO_SHARE = "/fileToShare.txt"; |  | ||||||
| 
 |  | ||||||
| 	/* Non-existent file*/ |  | ||||||
| 	private static final String NON_EXISTENT_FILE = "/nonExistentFile.txt"; |  | ||||||
| 	 |  | ||||||
| 	private TestActivity mActivity; |  | ||||||
| 	private String mFullPath2FileToShare; |  | ||||||
| 	private String mFullPath2NonExistentFile; |  | ||||||
| 	private String mRemoteServer; |  | ||||||
| 	 |  | ||||||
| 	@Override |  | ||||||
| 	protected void setUp() throws Exception { |  | ||||||
| 	    super.setUp(); |  | ||||||
| 	    setActivityInitialTouchMode(false); |  | ||||||
| 	    mActivity = getActivity(); |  | ||||||
| 	    mFullPath2FileToShare = mBaseFolderPath + FILE_TO_SHARE; |  | ||||||
| 	    mFullPath2NonExistentFile = mBaseFolderPath + NON_EXISTENT_FILE; |  | ||||||
| 	    mRemoteServer = getActivity().getString(R.string.server_base_url_2); |  | ||||||
| 	    		 |  | ||||||
| 		File textFile = mActivity.extractAsset(TestActivity.ASSETS__TEXT_FILE_NAME); |  | ||||||
| 		RemoteOperationResult result = mActivity.uploadFile( |  | ||||||
| 				textFile.getAbsolutePath(),  |  | ||||||
| 				mFullPath2FileToShare,  |  | ||||||
| 				"txt/plain"); |  | ||||||
| 		if (!result.isSuccess()) { |  | ||||||
| 			Utils.logAndThrow(LOG_TAG, result); |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	/** |  | ||||||
| 	 * Test creation of public shares |  | ||||||
| 	 */ |  | ||||||
| 	public void testCreatePublicShare() { |  | ||||||
| 
 |  | ||||||
| 		/// Successful cases |  | ||||||
| 		RemoteOperationResult result = mActivity.createShare( |  | ||||||
| 				mFullPath2FileToShare,  |  | ||||||
| 				ShareType.PUBLIC_LINK,  |  | ||||||
| 				"",  |  | ||||||
| 				false,  |  | ||||||
| 				"",  |  | ||||||
| 				1); |  | ||||||
| 		assertTrue(result.isSuccess()); |  | ||||||
| 		 |  | ||||||
| 		/// Failed cases |  | ||||||
| 		 |  | ||||||
| 		// file doesn't exist |  | ||||||
| 		result = mActivity.createShare( |  | ||||||
| 				mFullPath2NonExistentFile,  |  | ||||||
| 				ShareType.PUBLIC_LINK,  |  | ||||||
| 				"",  |  | ||||||
| 				false,  |  | ||||||
| 				"",  |  | ||||||
| 				1); |  | ||||||
| 		assertFalse(result.isSuccess()); |  | ||||||
| 		assertEquals( |  | ||||||
| 				RemoteOperationResult.ResultCode.SHARE_NOT_FOUND,  |  | ||||||
| 				result.getCode() |  | ||||||
| 		); |  | ||||||
| 		assertTrue(		// error message from server as part of the result |  | ||||||
| 				result.getData().size() == 1 &&  |  | ||||||
| 				result.getData().get(0) instanceof String |  | ||||||
| 		); |  | ||||||
| 		 |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 	 |  | ||||||
| 	/** |  | ||||||
| 	 * Test creation of private shares with groups |  | ||||||
| 	 */ |  | ||||||
| 	public void testCreatePrivateShareWithUser() { |  | ||||||
| 		 |  | ||||||
| 		/// Successful cases |  | ||||||
| 		RemoteOperationResult result = mActivity.createShare( |  | ||||||
| 				mFullPath2FileToShare,  |  | ||||||
| 				ShareType.USER,  |  | ||||||
| 				"admin",  |  | ||||||
| 				false,  |  | ||||||
| 				"",  |  | ||||||
| 				31); |  | ||||||
| 		assertTrue(result.isSuccess()); |  | ||||||
| 		 |  | ||||||
| 		 |  | ||||||
| 		/// Failed cases |  | ||||||
| 		 |  | ||||||
| 		// sharee doesn't exist |  | ||||||
| 		result = mActivity.createShare( |  | ||||||
| 				mFullPath2FileToShare,  |  | ||||||
| 				ShareType.USER,  |  | ||||||
| 				"no_exist",  |  | ||||||
| 				false,  |  | ||||||
| 				"",  |  | ||||||
| 				31); |  | ||||||
| 		assertFalse(result.isSuccess()); |  | ||||||
| 		assertEquals( |  | ||||||
| 				RemoteOperationResult.ResultCode.SHARE_FORBIDDEN,  |  | ||||||
| 				result.getCode() |  | ||||||
| 		); |  | ||||||
| 		assertTrue(		// error message from server as part of the result |  | ||||||
| 				result.getData().size() == 1 &&  |  | ||||||
| 				result.getData().get(0) instanceof String |  | ||||||
| 		); |  | ||||||
| 		 |  | ||||||
| 		// file doesn't exist |  | ||||||
| 		result = mActivity.createShare( |  | ||||||
| 				mFullPath2NonExistentFile,  |  | ||||||
| 				ShareType.USER,  |  | ||||||
| 				"admin",  |  | ||||||
| 				false,  |  | ||||||
| 				"",  |  | ||||||
| 				31); |  | ||||||
| 		assertFalse(result.isSuccess()); |  | ||||||
| 		assertEquals( |  | ||||||
| 				RemoteOperationResult.ResultCode.SHARE_NOT_FOUND,  |  | ||||||
| 				result.getCode() |  | ||||||
| 		); |  | ||||||
| 		assertTrue(		// error message from server as part of the result |  | ||||||
| 				result.getData().size() == 1 &&  |  | ||||||
| 				result.getData().get(0) instanceof String |  | ||||||
| 		); |  | ||||||
| 		 |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 	 |  | ||||||
| 	/** |  | ||||||
| 	 * Test creation of private shares with groups |  | ||||||
| 	 */ |  | ||||||
| 	public void testCreatePrivateShareWithGroup() { |  | ||||||
| 		 |  | ||||||
| 		/// Successful cases |  | ||||||
| 		RemoteOperationResult result = mActivity.createShare( |  | ||||||
| 				mFullPath2FileToShare,  |  | ||||||
| 				ShareType.GROUP,  |  | ||||||
| 				"admin",  |  | ||||||
| 				false,  |  | ||||||
| 				"",  |  | ||||||
| 				1); |  | ||||||
| 		assertTrue(result.isSuccess()); |  | ||||||
| 		 |  | ||||||
| 		 |  | ||||||
| 		/// Failed cases |  | ||||||
| 		 |  | ||||||
| 		// sharee doesn't exist |  | ||||||
| 		result = mActivity.createShare( |  | ||||||
| 				mFullPath2FileToShare,  |  | ||||||
| 				ShareType.GROUP,  |  | ||||||
| 				"no_exist",  |  | ||||||
| 				false,  |  | ||||||
| 				"",  |  | ||||||
| 				31); |  | ||||||
| 		assertFalse(result.isSuccess()); |  | ||||||
| 		assertEquals( |  | ||||||
| 				RemoteOperationResult.ResultCode.SHARE_FORBIDDEN,  |  | ||||||
| 				result.getCode() |  | ||||||
| 		); |  | ||||||
| 		assertTrue(		// error message from server as part of the result |  | ||||||
| 				result.getData().size() == 1 &&  |  | ||||||
| 				result.getData().get(0) instanceof String |  | ||||||
| 		); |  | ||||||
| 		 |  | ||||||
| 		// file doesn't exist |  | ||||||
| 		result = mActivity.createShare( |  | ||||||
| 				mFullPath2NonExistentFile,  |  | ||||||
| 				ShareType.GROUP,  |  | ||||||
| 				"admin",  |  | ||||||
| 				false,  |  | ||||||
| 				"",  |  | ||||||
| 				31); |  | ||||||
| 		assertFalse(result.isSuccess()); |  | ||||||
| 		assertEquals( |  | ||||||
| 				RemoteOperationResult.ResultCode.SHARE_NOT_FOUND,  |  | ||||||
| 				result.getCode() |  | ||||||
| 		); |  | ||||||
| 		assertTrue(		// error message from server as part of the result |  | ||||||
| 				result.getData().size() == 1 &&  |  | ||||||
| 				result.getData().get(0) instanceof String |  | ||||||
| 		); |  | ||||||
| 		 |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 	/** |  | ||||||
| 	 * Test creation of federated shares with remote users |  | ||||||
| 	 */ |  | ||||||
| 	public void testCreateFederatedShareWithUser() { |  | ||||||
| 		 |  | ||||||
| 		String remoteDomain = mRemoteServer.split("//")[1]; |  | ||||||
| 		 |  | ||||||
| 		/// Successful cases |  | ||||||
| 		RemoteOperationResult result = mActivity.createShare( |  | ||||||
| 				mFullPath2FileToShare,  |  | ||||||
| 				ShareType.FEDERATED,  |  | ||||||
| 				"admin@" + remoteDomain,  |  | ||||||
| 				false,  |  | ||||||
| 				"",  |  | ||||||
| 				1); |  | ||||||
| 		assertTrue(result.isSuccess()); |  | ||||||
| 		 |  | ||||||
| 		 |  | ||||||
| 		/// Failed cases |  | ||||||
| 		 |  | ||||||
| 		// sharee doesn't exist in an existing remote server |  | ||||||
| 		result = mActivity.createShare( |  | ||||||
| 				mFullPath2FileToShare,  |  | ||||||
| 				ShareType.FEDERATED,  |  | ||||||
| 				"no_exist@" + remoteDomain,  |  | ||||||
| 				false,  |  | ||||||
| 				"",  |  | ||||||
| 				31); |  | ||||||
| 		assertFalse(result.isSuccess()); |  | ||||||
| 		assertEquals( |  | ||||||
| 				RemoteOperationResult.ResultCode.SHARE_FORBIDDEN,  |  | ||||||
| 				result.getCode() |  | ||||||
| 		); |  | ||||||
| 		assertTrue(		// error message from server as part of the result |  | ||||||
| 				result.getData().size() == 1 &&  |  | ||||||
| 				result.getData().get(0) instanceof String |  | ||||||
| 		); |  | ||||||
| 		 |  | ||||||
| 		// remote server doesn't exist |  | ||||||
| 		result = mActivity.createShare( |  | ||||||
| 				mFullPath2FileToShare, |  | ||||||
| 				ShareType.FEDERATED, |  | ||||||
| 				"no_exist", |  | ||||||
| 				false, |  | ||||||
| 				"", |  | ||||||
| 				31); |  | ||||||
| 		assertFalse(result.isSuccess()); |  | ||||||
| 		assertEquals( |  | ||||||
| 				RemoteOperationResult.ResultCode.SHARE_WRONG_PARAMETER, |  | ||||||
| 				result.getCode() |  | ||||||
| 		); |  | ||||||
| 		assertTrue(		// error message from server as part of the result |  | ||||||
| 				result.getData().size() == 1 && |  | ||||||
| 				result.getData().get(0) instanceof String |  | ||||||
| 		); |  | ||||||
| 		 |  | ||||||
| 		// file doesn't exist |  | ||||||
| 		result = mActivity.createShare( |  | ||||||
| 				mFullPath2NonExistentFile,  |  | ||||||
| 				ShareType.FEDERATED,  |  | ||||||
| 				"admin@" + remoteDomain,  |  | ||||||
| 				false,  |  | ||||||
| 				"",  |  | ||||||
| 				31); |  | ||||||
| 		assertFalse(result.isSuccess()); |  | ||||||
| 		assertEquals( |  | ||||||
| 				RemoteOperationResult.ResultCode.SHARE_NOT_FOUND,  |  | ||||||
| 				result.getCode() |  | ||||||
| 		); |  | ||||||
| 		assertTrue(		// error message from server as part of the result |  | ||||||
| 				result.getData().size() == 1 &&  |  | ||||||
| 				result.getData().get(0) instanceof String |  | ||||||
| 		); |  | ||||||
| 		 |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 	 |  | ||||||
| 	@Override |  | ||||||
| 	protected void tearDown() throws Exception { |  | ||||||
| 		RemoteOperationResult removeResult = mActivity.removeFile(mFullPath2FileToShare); |  | ||||||
| 		if (!removeResult.isSuccess()  && removeResult.getCode() != ResultCode.TIMEOUT) { |  | ||||||
| 			Utils.logAndThrow(LOG_TAG, removeResult); |  | ||||||
| 		} |  | ||||||
| 		super.tearDown(); |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 	 |  | ||||||
| } |  | ||||||
| @ -1,104 +0,0 @@ | |||||||
| /* ownCloud Android Library is available under MIT license |  | ||||||
|  *   Copyright (C) 2016 ownCloud GmbH. |  | ||||||
|  *    |  | ||||||
|  *   Permission is hereby granted, free of charge, to any person obtaining a copy |  | ||||||
|  *   of this software and associated documentation files (the "Software"), to deal |  | ||||||
|  *   in the Software without restriction, including without limitation the rights |  | ||||||
|  *   to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |  | ||||||
|  *   copies of the Software, and to permit persons to whom the Software is |  | ||||||
|  *   furnished to do so, subject to the following conditions: |  | ||||||
|  *    |  | ||||||
|  *   The above copyright notice and this permission notice shall be included in |  | ||||||
|  *   all copies or substantial portions of the Software. |  | ||||||
|  *    |  | ||||||
|  *   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,  |  | ||||||
|  *   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |  | ||||||
|  *   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND  |  | ||||||
|  *   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS  |  | ||||||
|  *   BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN  |  | ||||||
|  *   ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN  |  | ||||||
|  *   CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |  | ||||||
|  *   THE SOFTWARE. |  | ||||||
|  * |  | ||||||
|  */ |  | ||||||
| 
 |  | ||||||
| package com.owncloud.android.lib.test_project.test; |  | ||||||
| 
 |  | ||||||
| import java.io.File; |  | ||||||
| 
 |  | ||||||
| import com.owncloud.android.lib.common.operations.RemoteOperationResult; |  | ||||||
| import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode; |  | ||||||
| import com.owncloud.android.lib.test_project.TestActivity; |  | ||||||
| 
 |  | ||||||
| /** |  | ||||||
|  * Class to test Delete a File Operation |  | ||||||
|  * @author masensio |  | ||||||
|  * |  | ||||||
|  */ |  | ||||||
| 
 |  | ||||||
| public class DeleteFileTest extends RemoteTest { |  | ||||||
| 
 |  | ||||||
| 	private static final String LOG_TAG = DeleteFileTest.class.getCanonicalName(); |  | ||||||
| 
 |  | ||||||
| 	/* Folder data to delete. */ |  | ||||||
| 	private static final String FOLDER_PATH = "/folderToDelete"; |  | ||||||
| 	 |  | ||||||
| 	/* File to delete. */ |  | ||||||
| 	private static final String FILE_PATH = "/fileToDelete.txt"; |  | ||||||
| 
 |  | ||||||
| 	private TestActivity mActivity; |  | ||||||
| 	private String mFullPath2Folder;  |  | ||||||
| 	private String mFullPath2File;  |  | ||||||
| 	 |  | ||||||
| 	@Override |  | ||||||
| 	  protected void setUp() throws Exception { |  | ||||||
| 	    super.setUp(); |  | ||||||
| 	    setActivityInitialTouchMode(false); |  | ||||||
| 	    mActivity = getActivity(); |  | ||||||
| 		mFullPath2Folder = mBaseFolderPath + FOLDER_PATH;  |  | ||||||
| 		mFullPath2File = mBaseFolderPath + FILE_PATH; |  | ||||||
| 	     |  | ||||||
| 		RemoteOperationResult result = mActivity.createFolder(mFullPath2Folder, true); |  | ||||||
| 		if (!result.isSuccess()  && result.getCode() != ResultCode.TIMEOUT) { |  | ||||||
| 			Utils.logAndThrow(LOG_TAG, result); |  | ||||||
| 		} |  | ||||||
| 		 |  | ||||||
| 		File textFile = mActivity.extractAsset(TestActivity.ASSETS__TEXT_FILE_NAME); |  | ||||||
| 		result = mActivity.uploadFile( |  | ||||||
| 				textFile.getAbsolutePath(),  |  | ||||||
| 				mFullPath2File,  |  | ||||||
| 				"txt/plain"); |  | ||||||
| 		if (!result.isSuccess()) { |  | ||||||
| 			Utils.logAndThrow(LOG_TAG, result); |  | ||||||
| 		} |  | ||||||
| 		 |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 	/** |  | ||||||
| 	 * Test Remove Folder |  | ||||||
| 	 */ |  | ||||||
| 	public void testRemoveFolder() { |  | ||||||
| 
 |  | ||||||
| 		RemoteOperationResult result = mActivity.removeFile(mFullPath2Folder); |  | ||||||
| 		assertTrue(result.isSuccess()); |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 	/** |  | ||||||
| 	 * Test Remove File |  | ||||||
| 	 */ |  | ||||||
| 	public void testRemoveFile() { |  | ||||||
| 		 |  | ||||||
| 		RemoteOperationResult result = mActivity.removeFile(mFullPath2File); |  | ||||||
| 		assertTrue(result.isSuccess()); |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	 |  | ||||||
| 	@Override |  | ||||||
| 	protected void tearDown() throws Exception { |  | ||||||
| 		// nothing to do: |  | ||||||
| 		//	- if tests were fine, there is nothing to clean up in the server side |  | ||||||
| 		//	- if tests failed, there is nothing we can do to clean up the server side |  | ||||||
| 		super.tearDown(); |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| } |  | ||||||
| @ -1,143 +0,0 @@ | |||||||
| /* ownCloud Android Library is available under MIT license |  | ||||||
|  *   Copyright (C) 2016 ownCloud GmbH. |  | ||||||
|  *    |  | ||||||
|  *   Permission is hereby granted, free of charge, to any person obtaining a copy |  | ||||||
|  *   of this software and associated documentation files (the "Software"), to deal |  | ||||||
|  *   in the Software without restriction, including without limitation the rights |  | ||||||
|  *   to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |  | ||||||
|  *   copies of the Software, and to permit persons to whom the Software is |  | ||||||
|  *   furnished to do so, subject to the following conditions: |  | ||||||
|  *    |  | ||||||
|  *   The above copyright notice and this permission notice shall be included in |  | ||||||
|  *   all copies or substantial portions of the Software. |  | ||||||
|  *    |  | ||||||
|  *   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,  |  | ||||||
|  *   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |  | ||||||
|  *   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND  |  | ||||||
|  *   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS  |  | ||||||
|  *   BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN  |  | ||||||
|  *   ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN  |  | ||||||
|  *   CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |  | ||||||
|  *   THE SOFTWARE. |  | ||||||
|  * |  | ||||||
|  */ |  | ||||||
| 
 |  | ||||||
| package com.owncloud.android.lib.test_project.test; |  | ||||||
| 
 |  | ||||||
| import java.io.File; |  | ||||||
| 
 |  | ||||||
| import com.owncloud.android.lib.resources.files.RemoteFile; |  | ||||||
| import com.owncloud.android.lib.common.operations.RemoteOperationResult; |  | ||||||
| import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode; |  | ||||||
| import com.owncloud.android.lib.test_project.TestActivity; |  | ||||||
| 
 |  | ||||||
| /** |  | ||||||
|  * Class to test Download File Operation |  | ||||||
|  * @author masensio |  | ||||||
|  * @author David A. Velasco |  | ||||||
|  */ |  | ||||||
| 
 |  | ||||||
| public class DownloadFileTest extends RemoteTest { |  | ||||||
| 
 |  | ||||||
| 	 |  | ||||||
| 	private static final String LOG_TAG = DownloadFileTest.class.getCanonicalName(); |  | ||||||
| 	 |  | ||||||
| 	/* Files to download. These files must exist on the account */ |  | ||||||
| 	private static final String IMAGE_PATH = "/fileToDownload.png"; |  | ||||||
| 	private static final String IMAGE_PATH_WITH_SPECIAL_CHARS = "/@file@download.png"; |  | ||||||
| 	private static final String IMAGE_NOT_FOUND = "/fileNotFound.png"; |  | ||||||
| 	 |  | ||||||
| 	private String mFullPath2Image; |  | ||||||
| 	private String mFullPath2ImageWitSpecialChars; |  | ||||||
| 	private String mFullPath2ImageNotFound; |  | ||||||
| 	private String mDownloadedFilePath; |  | ||||||
| 	private TestActivity mActivity; |  | ||||||
| 
 |  | ||||||
| 	 |  | ||||||
| 	@Override |  | ||||||
| 	  protected void setUp() throws Exception { |  | ||||||
| 	    super.setUp(); |  | ||||||
| 	    setActivityInitialTouchMode(false); |  | ||||||
| 	    mActivity = getActivity(); |  | ||||||
| 	    mDownloadedFilePath = null; |  | ||||||
|     	mFullPath2Image = mBaseFolderPath + IMAGE_PATH; |  | ||||||
|     	mFullPath2ImageWitSpecialChars = mBaseFolderPath + IMAGE_PATH_WITH_SPECIAL_CHARS; |  | ||||||
|     	mFullPath2ImageNotFound = mBaseFolderPath + IMAGE_NOT_FOUND; |  | ||||||
| 	     |  | ||||||
| 		File imageFile = mActivity.extractAsset(TestActivity.ASSETS__IMAGE_FILE_NAME); |  | ||||||
| 
 |  | ||||||
|     	RemoteOperationResult result = mActivity.uploadFile( |  | ||||||
| 				imageFile.getAbsolutePath(),  |  | ||||||
| 				mFullPath2Image,  |  | ||||||
| 				"image/png"); |  | ||||||
| 		if (!result.isSuccess()) { |  | ||||||
| 			Utils.logAndThrow(LOG_TAG, result); |  | ||||||
| 		} |  | ||||||
| 		 |  | ||||||
| 		result = mActivity.uploadFile( |  | ||||||
| 				imageFile.getAbsolutePath(),  |  | ||||||
| 				mFullPath2ImageWitSpecialChars,  |  | ||||||
| 				"image/png"); |  | ||||||
| 		if (!result.isSuccess()) { |  | ||||||
| 			Utils.logAndThrow(LOG_TAG, result); |  | ||||||
| 		} |  | ||||||
| 		 |  | ||||||
| 		result = mActivity.removeFile(mFullPath2ImageNotFound); |  | ||||||
| 		if (!result.isSuccess() && result.getCode() != ResultCode.FILE_NOT_FOUND) { |  | ||||||
| 			Utils.logAndThrow(LOG_TAG, result); |  | ||||||
| 		} |  | ||||||
| 		 |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	/** |  | ||||||
| 	 * Test Download a File |  | ||||||
| 	 */ |  | ||||||
| 	public void testDownloadFile() { |  | ||||||
| 		RemoteOperationResult result = mActivity.downloadFile( |  | ||||||
| 			new RemoteFile(mFullPath2Image), "" |  | ||||||
| 		); |  | ||||||
| 		mDownloadedFilePath = mFullPath2Image; |  | ||||||
| 		assertTrue(result.isSuccess()); |  | ||||||
| 		// TODO some checks involving the local file |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 	/** |  | ||||||
| 	 * Test Download a File with special chars |  | ||||||
| 	 */ |  | ||||||
| 	public void testDownloadFileSpecialChars() { |  | ||||||
| 		RemoteOperationResult result = mActivity.downloadFile( |  | ||||||
| 			new RemoteFile(mFullPath2ImageWitSpecialChars), "" |  | ||||||
| 		); |  | ||||||
| 		mDownloadedFilePath = mFullPath2ImageWitSpecialChars; |  | ||||||
| 		assertTrue(result.isSuccess()); |  | ||||||
| 		// TODO some checks involving the local file |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 	/** |  | ||||||
| 	 * Test Download a Not Found File  |  | ||||||
| 	 */ |  | ||||||
| 	public void testDownloadFileNotFound() { |  | ||||||
| 		RemoteOperationResult result = mActivity.downloadFile( |  | ||||||
| 			new RemoteFile(mFullPath2ImageNotFound), "" |  | ||||||
| 		); |  | ||||||
| 		assertFalse(result.isSuccess()); |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 	 |  | ||||||
| 	@Override |  | ||||||
| 	protected void tearDown() throws Exception { |  | ||||||
| 		if (mDownloadedFilePath != null) { |  | ||||||
| 			RemoteOperationResult removeResult = mActivity.removeFile(mDownloadedFilePath); |  | ||||||
| 			if (!removeResult.isSuccess()  && removeResult.getCode() != ResultCode.TIMEOUT) { |  | ||||||
| 				Utils.logAndThrow(LOG_TAG, removeResult); |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 		File[] files = mActivity.getFilesDir().listFiles(); |  | ||||||
| 		for (File file : files) { |  | ||||||
| 			file.delete(); |  | ||||||
| 		} |  | ||||||
| 		super.tearDown(); |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 	 |  | ||||||
| } |  | ||||||
| @ -1,144 +0,0 @@ | |||||||
| /* ownCloud Android Library is available under MIT license |  | ||||||
|  *   @author masensio |  | ||||||
|  *   Copyright (C) 2016 ownCloud GmbH. |  | ||||||
|  *    |  | ||||||
|  *   Permission is hereby granted, free of charge, to any person obtaining a copy |  | ||||||
|  *   of this software and associated documentation files (the "Software"), to deal |  | ||||||
|  *   in the Software without restriction, including without limitation the rights |  | ||||||
|  *   to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |  | ||||||
|  *   copies of the Software, and to permit persons to whom the Software is |  | ||||||
|  *   furnished to do so, subject to the following conditions: |  | ||||||
|  *    |  | ||||||
|  *   The above copyright notice and this permission notice shall be included in |  | ||||||
|  *   all copies or substantial portions of the Software. |  | ||||||
|  *    |  | ||||||
|  *   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,  |  | ||||||
|  *   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |  | ||||||
|  *   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND  |  | ||||||
|  *   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS  |  | ||||||
|  *   BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN  |  | ||||||
|  *   ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN  |  | ||||||
|  *   CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |  | ||||||
|  *   THE SOFTWARE. |  | ||||||
|  * |  | ||||||
|  */ |  | ||||||
| 
 |  | ||||||
| package com.owncloud.android.lib.test_project.test; |  | ||||||
| 
 |  | ||||||
| import java.security.GeneralSecurityException; |  | ||||||
| 
 |  | ||||||
| import junit.framework.AssertionFailedError; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| import android.content.Context; |  | ||||||
| import android.net.Uri; |  | ||||||
| import android.util.Log; |  | ||||||
| 
 |  | ||||||
| import com.owncloud.android.lib.common.OwnCloudClient; |  | ||||||
| import com.owncloud.android.lib.common.OwnCloudClientFactory; |  | ||||||
| import com.owncloud.android.lib.common.authentication.OwnCloudCredentialsFactory; |  | ||||||
| import com.owncloud.android.lib.common.network.NetworkUtils; |  | ||||||
| import com.owncloud.android.lib.common.operations.RemoteOperationResult; |  | ||||||
| import com.owncloud.android.lib.resources.status.GetRemoteCapabilitiesOperation; |  | ||||||
| import com.owncloud.android.lib.test_project.R; |  | ||||||
| 
 |  | ||||||
| /** |  | ||||||
|  * Class to test GetRemoteCapabilitiesOperation |  | ||||||
|  * |  | ||||||
|  */ |  | ||||||
| public class GetCapabilitiesTest extends RemoteTest { |  | ||||||
| 	private static final String LOG_TAG = GetCapabilitiesTest.class.getCanonicalName(); |  | ||||||
| 	 |  | ||||||
| 	String mServerUri, mUser, mPass; |  | ||||||
| 	OwnCloudClient mClient = null; |  | ||||||
| 	 |  | ||||||
| 	public GetCapabilitiesTest() { |  | ||||||
| 		super(); |  | ||||||
| 		 |  | ||||||
| 		Protocol pr = Protocol.getProtocol("https"); |  | ||||||
| 		if (pr == null || !(pr.getSocketFactory() instanceof SelfSignedConfidentSslSocketFactory)) { |  | ||||||
| 			try { |  | ||||||
| 				ProtocolSocketFactory psf = new SelfSignedConfidentSslSocketFactory(); |  | ||||||
| 				Protocol.registerProtocol( |  | ||||||
| 						"https", |  | ||||||
| 						new Protocol("https", psf, 443)); |  | ||||||
| 				 |  | ||||||
| 			} catch (GeneralSecurityException e) { |  | ||||||
| 				throw new AssertionFailedError( |  | ||||||
| 						"Self-signed confident SSL context could not be loaded"); |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 		 |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 	protected Context getContext() { |  | ||||||
| 		return getActivity(); |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	@Override |  | ||||||
| 	protected void setUp() throws Exception { |  | ||||||
| 	    super.setUp(); |  | ||||||
| 
 |  | ||||||
| 	    // Next initialization cannot be done in the constructor because getContext() is not  |  | ||||||
| 	    // ready yet, returns NULL. |  | ||||||
| 	    initAccessToServer(getContext()); |  | ||||||
| 	     |  | ||||||
| 	    Log.v(LOG_TAG, "Setting up the remote fixture..."); |  | ||||||
| 	     |  | ||||||
| 		Log.v(LOG_TAG, "Remote fixture created."); |  | ||||||
| 		 |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 	 |  | ||||||
| 	// Tests |  | ||||||
| 	/** |  | ||||||
| 	 *  Test get capabilities |  | ||||||
| 	 *  |  | ||||||
| 	 *  Requires OC server 8.1 or later |  | ||||||
| 	 */ |  | ||||||
| 	public void testGetRemoteCapabilitiesOperation() { |  | ||||||
| 		// get capabilities |  | ||||||
| 		GetRemoteCapabilitiesOperation getCapabilitiesOperation = new GetRemoteCapabilitiesOperation(); |  | ||||||
| 		RemoteOperationResult result = getCapabilitiesOperation.execute(mClient); |  | ||||||
| 		assertTrue(result.isSuccess()); |  | ||||||
| 		assertTrue(result.getData() != null && result.getData().size() == 1); |  | ||||||
| 		 |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 	@Override |  | ||||||
| 	protected void tearDown() throws Exception { |  | ||||||
| 	    Log.v(LOG_TAG, "Deleting remote fixture..."); |  | ||||||
| 		super.tearDown(); |  | ||||||
| 	    Log.v(LOG_TAG, "Remote fixture delete."); |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	 |  | ||||||
| 	private void initAccessToServer(Context context) { |  | ||||||
| 	    Log.v(LOG_TAG, "Setting up client instance to access OC server..."); |  | ||||||
| 		 |  | ||||||
| 		mServerUri = context.getString(R.string.server_base_url); |  | ||||||
| 		mUser = context.getString(R.string.username); |  | ||||||
| 		mPass = context.getString(R.string.password); |  | ||||||
| 		 |  | ||||||
| 		mClient = new OwnCloudClient( |  | ||||||
| 				Uri.parse(mServerUri),  |  | ||||||
| 				NetworkUtils.getMultiThreadedConnManager() |  | ||||||
| 		); |  | ||||||
| 		mClient.setDefaultTimeouts( |  | ||||||
| 				OwnCloudClientFactory.DEFAULT_DATA_TIMEOUT,  |  | ||||||
| 				OwnCloudClientFactory.DEFAULT_CONNECTION_TIMEOUT); |  | ||||||
| 		mClient.setFollowRedirects(true); |  | ||||||
| 		mClient.setCredentials( |  | ||||||
| 				OwnCloudCredentialsFactory.newBasicCredentials( |  | ||||||
| 						mUser,  |  | ||||||
| 						mPass |  | ||||||
| 				) |  | ||||||
| 		); |  | ||||||
| 		 |  | ||||||
| 	    Log.v(LOG_TAG, "Client instance set up."); |  | ||||||
| 	     |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| @ -1,282 +0,0 @@ | |||||||
| /* ownCloud Android Library is available under MIT license |  | ||||||
|  *   @author David A. Velasco |  | ||||||
|  *   Copyright (C) 2016 ownCloud GmbH. |  | ||||||
|  *    |  | ||||||
|  *   Permission is hereby granted, free of charge, to any person obtaining a copy |  | ||||||
|  *   of this software and associated documentation files (the "Software"), to deal |  | ||||||
|  *   in the Software without restriction, including without limitation the rights |  | ||||||
|  *   to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |  | ||||||
|  *   copies of the Software, and to permit persons to whom the Software is |  | ||||||
|  *   furnished to do so, subject to the following conditions: |  | ||||||
|  *    |  | ||||||
|  *   The above copyright notice and this permission notice shall be included in |  | ||||||
|  *   all copies or substantial portions of the Software. |  | ||||||
|  *    |  | ||||||
|  *   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,  |  | ||||||
|  *   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |  | ||||||
|  *   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND  |  | ||||||
|  *   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS  |  | ||||||
|  *   BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN  |  | ||||||
|  *   ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN  |  | ||||||
|  *   CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |  | ||||||
|  *   THE SOFTWARE. |  | ||||||
|  * |  | ||||||
|  */ |  | ||||||
| 
 |  | ||||||
| package com.owncloud.android.lib.test_project.test; |  | ||||||
| 
 |  | ||||||
| import java.security.GeneralSecurityException; |  | ||||||
| 
 |  | ||||||
| import junit.framework.AssertionFailedError; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| import org.json.JSONException; |  | ||||||
| import org.json.JSONObject; |  | ||||||
| 
 |  | ||||||
| import com.owncloud.android.lib.common.OwnCloudClient; |  | ||||||
| import com.owncloud.android.lib.common.OwnCloudClientFactory; |  | ||||||
| import com.owncloud.android.lib.common.authentication.OwnCloudCredentialsFactory; |  | ||||||
| import com.owncloud.android.lib.common.network.NetworkUtils; |  | ||||||
| import com.owncloud.android.lib.common.operations.RemoteOperationResult; |  | ||||||
| import com.owncloud.android.lib.resources.shares.GetRemoteShareesOperation; |  | ||||||
| import com.owncloud.android.lib.resources.shares.ShareType; |  | ||||||
| import com.owncloud.android.lib.test_project.R; |  | ||||||
| 
 |  | ||||||
| import android.content.Context; |  | ||||||
| import android.net.Uri; |  | ||||||
| import android.util.Log; |  | ||||||
| 
 |  | ||||||
| /** |  | ||||||
|  * Class to test GetRemoteShareesOperation |  | ||||||
|  * |  | ||||||
|  * With this TestCase we are experimenting a bit to improve the test suite design, in two aspects: |  | ||||||
|  *  |  | ||||||
|  *  - Reduce the dependency from the set of test cases on the "test project" needed to  |  | ||||||
|  *  have an instrumented APK to install in the device, as required by the testing framework |  | ||||||
|  *  provided by Android. To get there, this class avoids calling TestActivity methods in the test  |  | ||||||
|  *  method. |  | ||||||
|  *   |  | ||||||
|  *  - Reduce the impact of creating a remote fixture over the Internet, while the structure of the  |  | ||||||
|  *  TestCase is kept easy to maintain. To get this, all the tests are done in a single test method,  |  | ||||||
|  *  granting this way that setUp and tearDown are run only once. |  | ||||||
|  * |  | ||||||
|  */ |  | ||||||
| 
 |  | ||||||
| public class GetShareesTest extends RemoteTest { |  | ||||||
| 
 |  | ||||||
| 	private static final String LOG_TAG = GetShareesTest.class.getCanonicalName(); |  | ||||||
| 		 |  | ||||||
| 	String mServerUri, mUser, mPass, mServerUri2; |  | ||||||
| 	OwnCloudClient mClient = null; |  | ||||||
| 	 |  | ||||||
| 	public GetShareesTest() { |  | ||||||
| 		super(); |  | ||||||
| 		 |  | ||||||
| 		Protocol pr = Protocol.getProtocol("https"); |  | ||||||
| 		if (pr == null || !(pr.getSocketFactory() instanceof SelfSignedConfidentSslSocketFactory)) { |  | ||||||
| 			try { |  | ||||||
| 				ProtocolSocketFactory psf = new SelfSignedConfidentSslSocketFactory(); |  | ||||||
| 				Protocol.registerProtocol( |  | ||||||
| 						"https", |  | ||||||
| 						new Protocol("https", psf, 443)); |  | ||||||
| 				 |  | ||||||
| 			} catch (GeneralSecurityException e) { |  | ||||||
| 				throw new AssertionFailedError( |  | ||||||
| 						"Self-signed confident SSL context could not be loaded"); |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 		 |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 	protected Context getContext() { |  | ||||||
| 		return getActivity(); |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 	@Override |  | ||||||
| 	protected void setUp() throws Exception { |  | ||||||
| 	    super.setUp(); |  | ||||||
| 
 |  | ||||||
| 	    // Next initialization cannot be done in the constructor because getContext() is not  |  | ||||||
| 	    // ready yet, returns NULL. |  | ||||||
| 	    initAccessToServer(getContext()); |  | ||||||
| 	     |  | ||||||
| 	    Log.v(LOG_TAG, "Setting up the remote fixture..."); |  | ||||||
| 	     |  | ||||||
| 		Log.v(LOG_TAG, "Remote fixture created."); |  | ||||||
| 		 |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 	/** |  | ||||||
| 	 *  Test get sharees |  | ||||||
| 	 *  |  | ||||||
| 	 *  Requires OC server 8.2 or later |  | ||||||
| 	 */ |  | ||||||
| 	public void testGetRemoteShareesOperation() { |  | ||||||
| 		Log.v(LOG_TAG, "testGetRemoteSharees in"); |  | ||||||
| 
 |  | ||||||
| 		/// successful cases |  | ||||||
| 
 |  | ||||||
| 		// search for sharees including "a" |  | ||||||
| 		GetRemoteShareesOperation getShareesOperation = new GetRemoteShareesOperation("a", 1, 50); |  | ||||||
| 		RemoteOperationResult result = getShareesOperation.execute(mClient); |  | ||||||
| 		JSONObject resultItem; |  | ||||||
| 		JSONObject value; |  | ||||||
| 		int type; |  | ||||||
| 		int userCount = 0, groupCount = 0; |  | ||||||
| 		assertTrue(result.isSuccess() && result.getData().size() > 0); |  | ||||||
| 		try { |  | ||||||
| 			for (int i=0; i<result.getData().size(); i++) { |  | ||||||
| 				resultItem = (JSONObject) result.getData().get(i); |  | ||||||
| 	            value = resultItem.getJSONObject(GetRemoteShareesOperation.NODE_VALUE); |  | ||||||
| 	            type = value.getInt(GetRemoteShareesOperation.PROPERTY_SHARE_TYPE); |  | ||||||
| 				if (type == ShareType.GROUP.getValue()) { |  | ||||||
| 					groupCount++; |  | ||||||
| 				} else { |  | ||||||
| 					userCount++; |  | ||||||
| 				} |  | ||||||
| 			} |  | ||||||
| 			assertTrue(userCount > 0); |  | ||||||
| 			assertTrue(groupCount > 0); |  | ||||||
| 		} catch (JSONException e) { |  | ||||||
| 			AssertionFailedError afe = new AssertionFailedError(e.getLocalizedMessage()); |  | ||||||
| 			afe.setStackTrace(e.getStackTrace()); |  | ||||||
| 			throw afe; |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		// search for sharees including "ad" - expecting user "admin" & group "admin" |  | ||||||
| 		getShareesOperation = new GetRemoteShareesOperation("ad", 1, 50); |  | ||||||
| 		result = getShareesOperation.execute(mClient); |  | ||||||
| 		assertTrue(result.isSuccess() && result.getData().size() == 2); |  | ||||||
| 		userCount = 0; groupCount = 0; |  | ||||||
| 		try { |  | ||||||
| 			for (int i=0; i<2; i++) { |  | ||||||
| 				resultItem = (JSONObject) result.getData().get(i); |  | ||||||
| 	            value = resultItem.getJSONObject(GetRemoteShareesOperation.NODE_VALUE); |  | ||||||
| 	            type = value.getInt(GetRemoteShareesOperation.PROPERTY_SHARE_TYPE); |  | ||||||
| 				if (type == ShareType.GROUP.getValue()) { |  | ||||||
| 					groupCount++; |  | ||||||
| 				} else { |  | ||||||
| 					userCount++; |  | ||||||
| 				} |  | ||||||
| 			} |  | ||||||
| 			assertEquals(userCount, 1); |  | ||||||
| 			assertEquals(groupCount, 1); |  | ||||||
| 		} catch (JSONException e) { |  | ||||||
| 			AssertionFailedError afe = new AssertionFailedError(e.getLocalizedMessage()); |  | ||||||
| 			afe.setStackTrace(e.getStackTrace()); |  | ||||||
| 			throw afe; |  | ||||||
| 		} |  | ||||||
| 		 |  | ||||||
| 		 |  | ||||||
| 		// search for sharees including "bd" - expecting 0 results |  | ||||||
| 		getShareesOperation = new GetRemoteShareesOperation("bd", 1, 50); |  | ||||||
| 		result = getShareesOperation.execute(mClient); |  | ||||||
| 		assertTrue(result.isSuccess() && result.getData().size() == 0); |  | ||||||
| 		 |  | ||||||
| 		 |  | ||||||
| 		/// failed cases |  | ||||||
| 		 |  | ||||||
| 		// search for sharees including wrong page values |  | ||||||
| 		getShareesOperation = new GetRemoteShareesOperation("a", 0, 50); |  | ||||||
| 		result = getShareesOperation.execute(mClient); |  | ||||||
| 		assertTrue(!result.isSuccess() && result.getHttpCode() == HttpConstants.HTTP_BAD_REQUEST); |  | ||||||
| 		 |  | ||||||
| 		getShareesOperation = new GetRemoteShareesOperation("a", 1, 0); |  | ||||||
| 		result = getShareesOperation.execute(mClient); |  | ||||||
| 		assertTrue(!result.isSuccess() && result.getHttpCode() == HttpConstants.HTTP_BAD_REQUEST); |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 	/** |  | ||||||
| 	 *  Test get federated sharees |  | ||||||
| 	 *  |  | ||||||
| 	 *  Requires OC server 8.2 or later |  | ||||||
| 	 */ |  | ||||||
| 	public void testGetFederatedShareesOperation() { |  | ||||||
| 		Log.v(LOG_TAG, "testGetFederatedSharees in"); |  | ||||||
| 
 |  | ||||||
| 		/// successful cases |  | ||||||
| 
 |  | ||||||
| 		// search for sharees including "@" |  | ||||||
| 		GetRemoteShareesOperation getShareesOperation = new GetRemoteShareesOperation("@", 1, 50); |  | ||||||
| 		RemoteOperationResult result = getShareesOperation.execute(mClient); |  | ||||||
| 		JSONObject resultItem; |  | ||||||
| 		JSONObject value; |  | ||||||
| 		int type; |  | ||||||
| 		int fedCount = 0; |  | ||||||
| 		assertTrue(result.isSuccess() && result.getData().size() > 0); |  | ||||||
| 		try { |  | ||||||
| 			for (int i=0; i<result.getData().size(); i++) { |  | ||||||
| 				resultItem = (JSONObject) result.getData().get(i); |  | ||||||
| 				value = resultItem.getJSONObject(GetRemoteShareesOperation.NODE_VALUE); |  | ||||||
| 				type = value.getInt(GetRemoteShareesOperation.PROPERTY_SHARE_TYPE); |  | ||||||
| 				if (type == ShareType.FEDERATED.getValue()) { |  | ||||||
| 					fedCount++; |  | ||||||
| 				} |  | ||||||
| 			} |  | ||||||
| 			assertTrue(fedCount > 0); |  | ||||||
| 		} catch (JSONException e) { |  | ||||||
| 			AssertionFailedError afe = new AssertionFailedError(e.getLocalizedMessage()); |  | ||||||
| 			afe.setStackTrace(e.getStackTrace()); |  | ||||||
| 			throw afe; |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		// search for 'admin' sharee from external server - expecting at least 1 result |  | ||||||
| 		String remoteSharee = "admin@" + mServerUri2.split("//")[1]; |  | ||||||
| 		getShareesOperation = new GetRemoteShareesOperation(remoteSharee, 1, 50); |  | ||||||
| 		result = getShareesOperation.execute(mClient); |  | ||||||
| 		assertTrue(result.isSuccess() && result.getData().size() > 0); |  | ||||||
| 
 |  | ||||||
| 		 |  | ||||||
| 		/// failed cases |  | ||||||
| 		 |  | ||||||
| 		// search for sharees including wrong page values |  | ||||||
| 		getShareesOperation = new GetRemoteShareesOperation("@", 0, 50); |  | ||||||
| 		result = getShareesOperation.execute(mClient); |  | ||||||
| 		assertTrue(!result.isSuccess() && result.getHttpCode() == HttpConstants.HTTP_BAD_REQUEST); |  | ||||||
| 		 |  | ||||||
| 		getShareesOperation = new GetRemoteShareesOperation("@", 1, 0); |  | ||||||
| 		result = getShareesOperation.execute(mClient); |  | ||||||
| 		assertTrue(!result.isSuccess() && result.getHttpCode() == HttpConstants.HTTP_BAD_REQUEST); |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 	@Override |  | ||||||
| 	protected void tearDown() throws Exception { |  | ||||||
| 	    Log.v(LOG_TAG, "Deleting remote fixture..."); |  | ||||||
| 		super.tearDown(); |  | ||||||
| 	    Log.v(LOG_TAG, "Remote fixture delete."); |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	 |  | ||||||
| 	private void initAccessToServer(Context context) { |  | ||||||
| 	    Log.v(LOG_TAG, "Setting up client instance to access OC server..."); |  | ||||||
| 		 |  | ||||||
| 		mServerUri = context.getString(R.string.server_base_url); |  | ||||||
| 		mServerUri2 = context.getString(R.string.server_base_url_2); |  | ||||||
| 		mUser = context.getString(R.string.username); |  | ||||||
| 		mPass = context.getString(R.string.password); |  | ||||||
| 		 |  | ||||||
| 		mClient = new OwnCloudClient( |  | ||||||
| 				Uri.parse(mServerUri),  |  | ||||||
| 				NetworkUtils.getMultiThreadedConnManager() |  | ||||||
| 		); |  | ||||||
| 		mClient.setDefaultTimeouts( |  | ||||||
| 				OwnCloudClientFactory.DEFAULT_DATA_TIMEOUT,  |  | ||||||
| 				OwnCloudClientFactory.DEFAULT_CONNECTION_TIMEOUT); |  | ||||||
| 		mClient.setFollowRedirects(true); |  | ||||||
| 		mClient.setCredentials( |  | ||||||
| 				OwnCloudCredentialsFactory.newBasicCredentials( |  | ||||||
| 						mUser,  |  | ||||||
| 						mPass |  | ||||||
| 				) |  | ||||||
| 		); |  | ||||||
| 		 |  | ||||||
| 	    Log.v(LOG_TAG, "Client instance set up."); |  | ||||||
| 	     |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 	 |  | ||||||
| } |  | ||||||
| @ -1,93 +0,0 @@ | |||||||
| /* ownCloud Android Library is available under MIT license |  | ||||||
|  *   Copyright (C) 2016 ownCloud GmbH. |  | ||||||
|  *    |  | ||||||
|  *   Permission is hereby granted, free of charge, to any person obtaining a copy |  | ||||||
|  *   of this software and associated documentation files (the "Software"), to deal |  | ||||||
|  *   in the Software without restriction, including without limitation the rights |  | ||||||
|  *   to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |  | ||||||
|  *   copies of the Software, and to permit persons to whom the Software is |  | ||||||
|  *   furnished to do so, subject to the following conditions: |  | ||||||
|  *    |  | ||||||
|  *   The above copyright notice and this permission notice shall be included in |  | ||||||
|  *   all copies or substantial portions of the Software. |  | ||||||
|  *    |  | ||||||
|  *   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,  |  | ||||||
|  *   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |  | ||||||
|  *   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND  |  | ||||||
|  *   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS  |  | ||||||
|  *   BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN  |  | ||||||
|  *   ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN  |  | ||||||
|  *   CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |  | ||||||
|  *   THE SOFTWARE. |  | ||||||
|  * |  | ||||||
|  */ |  | ||||||
| 
 |  | ||||||
| package com.owncloud.android.lib.test_project.test; |  | ||||||
| 
 |  | ||||||
| import java.io.File; |  | ||||||
| 
 |  | ||||||
| import com.owncloud.android.lib.common.operations.RemoteOperationResult; |  | ||||||
| import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode; |  | ||||||
| import com.owncloud.android.lib.resources.shares.ShareType; |  | ||||||
| import com.owncloud.android.lib.test_project.TestActivity; |  | ||||||
| 
 |  | ||||||
| /**  |  | ||||||
|  * Class to test Get Shares Operation |  | ||||||
|  *  |  | ||||||
|  * @author masensio |  | ||||||
|  * |  | ||||||
|  */ |  | ||||||
| 
 |  | ||||||
| public class GetSharesTest extends RemoteTest { |  | ||||||
| 
 |  | ||||||
| 	private static final String LOG_TAG = GetSharesTest.class.getCanonicalName(); |  | ||||||
| 
 |  | ||||||
| 	private static final String SHARED_FILE = "/sharedFileToGet.txt"; |  | ||||||
| 	 |  | ||||||
| 	private TestActivity mActivity; |  | ||||||
| 	private String mFullPath2SharedFile; |  | ||||||
| 	 |  | ||||||
| 	@Override |  | ||||||
| 	  protected void setUp() throws Exception { |  | ||||||
| 	    super.setUp(); |  | ||||||
| 	    setActivityInitialTouchMode(false); |  | ||||||
| 	    mActivity = getActivity(); |  | ||||||
| 	    mFullPath2SharedFile = mBaseFolderPath + SHARED_FILE;  |  | ||||||
| 	    		 |  | ||||||
| 		File textFile = mActivity.extractAsset(TestActivity.ASSETS__TEXT_FILE_NAME); |  | ||||||
| 		RemoteOperationResult result = mActivity.uploadFile( |  | ||||||
| 				textFile.getAbsolutePath(),  |  | ||||||
| 				mFullPath2SharedFile,  |  | ||||||
| 				"txt/plain"); |  | ||||||
| 		if (!result.isSuccess()) { |  | ||||||
| 			Utils.logAndThrow(LOG_TAG, result); |  | ||||||
| 		} |  | ||||||
| 		 |  | ||||||
| 		result = mActivity.createShare(mFullPath2SharedFile, ShareType.PUBLIC_LINK, "", false, "", 1); |  | ||||||
| 		if (!result.isSuccess()  && result.getCode() != ResultCode.TIMEOUT) { |  | ||||||
| 			Utils.logAndThrow(LOG_TAG, result); |  | ||||||
| 		} |  | ||||||
| 		 |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 	/** |  | ||||||
| 	 * Test Get Shares: the server must support SHARE API |  | ||||||
| 	 */ |  | ||||||
| 	public void testGetShares() { |  | ||||||
| 		RemoteOperationResult result = mActivity.getShares(); |  | ||||||
| 		assertTrue(result.isSuccess()); |  | ||||||
| 		assertTrue(result.getData() != null && result.getData().size() == 1); |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 
 |  | ||||||
| 	@Override |  | ||||||
| 	protected void tearDown() throws Exception { |  | ||||||
| 		RemoteOperationResult removeResult = mActivity.removeFile(mFullPath2SharedFile); |  | ||||||
| 		if (!removeResult.isSuccess() && removeResult.getCode() != ResultCode.TIMEOUT) { |  | ||||||
| 			Utils.logAndThrow(LOG_TAG, removeResult); |  | ||||||
| 		} |  | ||||||
| 		super.tearDown(); |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 	 |  | ||||||
| } |  | ||||||
| @ -1,107 +0,0 @@ | |||||||
| /* ownCloud Android Library is available under MIT license |  | ||||||
|  * |  | ||||||
|  *   Copyright (C) 2016 ownCloud GmbH. |  | ||||||
|  * |  | ||||||
|  *   Permission is hereby granted, free of charge, to any person obtaining a copy |  | ||||||
|  *   of this software and associated documentation files (the "Software"), to deal |  | ||||||
|  *   in the Software without restriction, including without limitation the rights |  | ||||||
|  *   to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |  | ||||||
|  *   copies of the Software, and to permit persons to whom the Software is |  | ||||||
|  *   furnished to do so, subject to the following conditions: |  | ||||||
|  * |  | ||||||
|  *   The above copyright notice and this permission notice shall be included in |  | ||||||
|  *   all copies or substantial portions of the Software. |  | ||||||
|  * |  | ||||||
|  *   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |  | ||||||
|  *   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |  | ||||||
|  *   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND |  | ||||||
|  *   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS |  | ||||||
|  *   BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN |  | ||||||
|  *   ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN |  | ||||||
|  *   CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |  | ||||||
|  *   THE SOFTWARE. |  | ||||||
|  * |  | ||||||
|  */ |  | ||||||
| 
 |  | ||||||
| package com.owncloud.android.lib.test_project.test; |  | ||||||
| 
 |  | ||||||
| import java.util.*; |  | ||||||
| 
 |  | ||||||
| import com.owncloud.android.lib.common.operations.RemoteOperationResult; |  | ||||||
| import com.owncloud.android.lib.resources.users.GetRemoteUserAvatarOperation.ResultData; |  | ||||||
| import com.owncloud.android.lib.test_project.TestActivity; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| /** |  | ||||||
|  * Class to test {@link GetRemoteUserAvatarOperation} |  | ||||||
|  * |  | ||||||
|  * @author David A. Velasco |  | ||||||
|  */ |  | ||||||
| public class GetUserAvatarTest extends RemoteTest { |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
|     private static final String LOG_TAG = GetUserAvatarTest.class.getCanonicalName(); |  | ||||||
| 
 |  | ||||||
|     private static final int AVATAR_DIMENSION = 256; |  | ||||||
| 
 |  | ||||||
|     private TestActivity mActivity; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
|     @Override |  | ||||||
|     protected void setUp() throws Exception { |  | ||||||
|         super.setUp(); |  | ||||||
|         mActivity = getActivity(); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     /** |  | ||||||
|      * Test get user avatar (succesful) |  | ||||||
|      */ |  | ||||||
|     public void testGetUserAvatar() { |  | ||||||
|         RemoteOperationResult result = mActivity.getUserAvatar(AVATAR_DIMENSION, null); |  | ||||||
|         assertTrue(result.isSuccess()); |  | ||||||
|         ResultData userAvatar = (ResultData) result.getData().get(0); |  | ||||||
|         assertTrue(userAvatar.getEtag() != null && userAvatar.getEtag().length() > 0); |  | ||||||
|         assertTrue(userAvatar.getMimeType() != null && userAvatar.getMimeType().startsWith("image")); |  | ||||||
|         assertTrue(userAvatar.getAvatarData() != null && userAvatar.getAvatarData().length > 0); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     /** |  | ||||||
|      * Test get user avatar only if changed, but wasn't changed |  | ||||||
|      * |  | ||||||
|      * DISABLED: conditioned call has been disabled due to problems with the network stack; |  | ||||||
|      * see comment in src/com/owncloud/android/lib/resources/users/GetRemoteUserAvatarOperation.java#87 |  | ||||||
|      */ |  | ||||||
|     /* |  | ||||||
|     public void testGetUserAvatarOnlyIfChangedAfterUnchanged() { |  | ||||||
|         RemoteOperationResult result = mActivity.getUserAvatar(AVATAR_DIMENSION, null); |  | ||||||
|         ResultData userAvatar = (ResultData) result.getData().get(0); |  | ||||||
|         String etag = userAvatar.getEtag(); |  | ||||||
| 
 |  | ||||||
|         // request again, with the just received etag |  | ||||||
|         result = mActivity.getUserAvatar(AVATAR_DIMENSION, etag); |  | ||||||
|         assertFalse(result.isSuccess()); |  | ||||||
|         assertTrue(result.getHttpCode() == HttpConstants.HTTP_NOT_MODIFIED); |  | ||||||
|     } |  | ||||||
|     */ |  | ||||||
| 
 |  | ||||||
|     /** |  | ||||||
|      * Test get user avatar only if changed, and was changed |  | ||||||
|      */ |  | ||||||
|     public void testGetUserAvatarOnlyIfChangedAfterChanged() { |  | ||||||
|         // TODO can't test this without provisioning API or mocking the server |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     /** |  | ||||||
|      * Test get user avatar not found |  | ||||||
|      */ |  | ||||||
|     public void testGetUserAvatarNofFound() { |  | ||||||
|         // TODO can't test this without provisioning API, mocking the server or another set of credentials |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     @Override |  | ||||||
|     protected void tearDown() throws Exception { |  | ||||||
|         super.tearDown(); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
| } |  | ||||||
| @ -1,73 +0,0 @@ | |||||||
| /* ownCloud Android Library is available under MIT license |  | ||||||
|  * |  | ||||||
|  *   Copyright (C) 2018 ownCloud Inc. |  | ||||||
|  *   Copyright (C) 2015 Bartosz Przybylski |  | ||||||
|  * |  | ||||||
|  *   Permission is hereby granted, free of charge, to any person obtaining a copy |  | ||||||
|  *   of this software and associated documentation files (the "Software"), to deal |  | ||||||
|  *   in the Software without restriction, including without limitation the rights |  | ||||||
|  *   to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |  | ||||||
|  *   copies of the Software, and to permit persons to whom the Software is |  | ||||||
|  *   furnished to do so, subject to the following conditions: |  | ||||||
|  * |  | ||||||
|  *   The above copyright notice and this permission notice shall be included in |  | ||||||
|  *   all copies or substantial portions of the Software. |  | ||||||
|  * |  | ||||||
|  *   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |  | ||||||
|  *   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |  | ||||||
|  *   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND |  | ||||||
|  *   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS |  | ||||||
|  *   BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN |  | ||||||
|  *   ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN |  | ||||||
|  *   CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |  | ||||||
|  *   THE SOFTWARE. |  | ||||||
|  * |  | ||||||
|  */ |  | ||||||
| 
 |  | ||||||
| package com.owncloud.android.lib.test_project.test; |  | ||||||
| 
 |  | ||||||
| import java.util.*; |  | ||||||
| 
 |  | ||||||
| import com.owncloud.android.lib.common.operations.RemoteOperationResult; |  | ||||||
| import com.owncloud.android.lib.resources.users.GetRemoteUserQuotaOperation.Quota; |  | ||||||
| import com.owncloud.android.lib.test_project.TestActivity; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| /** |  | ||||||
|  * Class to test Get User Quota |  | ||||||
|  * |  | ||||||
|  * @author Bartosz Przybylski |  | ||||||
|  * @author David A. Velasco |  | ||||||
|  * @author David González Verdugo |  | ||||||
|  */ |  | ||||||
| public class GetUserQuotaTest extends RemoteTest { |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
|     private static final String LOG_TAG = GetUserQuotaTest.class.getCanonicalName(); |  | ||||||
| 
 |  | ||||||
|     private TestActivity mActivity; |  | ||||||
|     private String mFullPath2Root; |  | ||||||
|     private String ROOT_PATH = "/"; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
|     @Override |  | ||||||
|     protected void setUp() throws Exception { |  | ||||||
|         super.setUp(); |  | ||||||
|         setActivityInitialTouchMode(false); |  | ||||||
|         mActivity = getActivity(); |  | ||||||
|         mFullPath2Root = mBaseFolderPath + ROOT_PATH; |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     /** |  | ||||||
|      * Test GetUserQuota |  | ||||||
|      */ |  | ||||||
|     public void testGetUserQuota() { |  | ||||||
|         RemoteOperationResult result = mActivity.getQuota(mFullPath2Root); |  | ||||||
|         assertTrue(result.isSuccess()); |  | ||||||
|         Quota quota = (Quota)((ArrayList<Object>)result.getData()).get(0); |  | ||||||
|         assertTrue(quota.getFree() >= 0); |  | ||||||
|         assertTrue(quota.getUsed() >= 0); |  | ||||||
|         assertTrue(quota.getTotal() > 0); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
| } |  | ||||||
| @ -1,456 +0,0 @@ | |||||||
| /* ownCloud Android Library is available under MIT license |  | ||||||
|  *   Copyright (C) 2016 ownCloud GmbH. |  | ||||||
|  *    |  | ||||||
|  *   Permission is hereby granted, free of charge, to any person obtaining a copy |  | ||||||
|  *   of this software and associated documentation files (the "Software"), to deal |  | ||||||
|  *   in the Software without restriction, including without limitation the rights |  | ||||||
|  *   to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |  | ||||||
|  *   copies of the Software, and to permit persons to whom the Software is |  | ||||||
|  *   furnished to do so, subject to the following conditions: |  | ||||||
|  *    |  | ||||||
|  *   The above copyright notice and this permission notice shall be included in |  | ||||||
|  *   all copies or substantial portions of the Software. |  | ||||||
|  *    |  | ||||||
|  *   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,  |  | ||||||
|  *   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |  | ||||||
|  *   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND  |  | ||||||
|  *   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS  |  | ||||||
|  *   BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN  |  | ||||||
|  *   ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN  |  | ||||||
|  *   CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |  | ||||||
|  *   THE SOFTWARE. |  | ||||||
|  * |  | ||||||
|  */ |  | ||||||
| 
 |  | ||||||
| package com.owncloud.android.lib.test_project.test; |  | ||||||
| 
 |  | ||||||
| import java.io.File; |  | ||||||
| import java.security.GeneralSecurityException; |  | ||||||
| 
 |  | ||||||
| import junit.framework.AssertionFailedError; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| import com.owncloud.android.lib.common.OwnCloudClient; |  | ||||||
| import com.owncloud.android.lib.common.OwnCloudClientFactory; |  | ||||||
| import com.owncloud.android.lib.common.authentication.OwnCloudCredentialsFactory; |  | ||||||
| import com.owncloud.android.lib.common.network.NetworkUtils; |  | ||||||
| import com.owncloud.android.lib.common.operations.RemoteOperationResult; |  | ||||||
| import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode; |  | ||||||
| import com.owncloud.android.lib.resources.files.MoveRemoteFileOperation; |  | ||||||
| import com.owncloud.android.lib.test_project.R; |  | ||||||
| import com.owncloud.android.lib.test_project.TestActivity; |  | ||||||
| 
 |  | ||||||
| import android.content.Context; |  | ||||||
| import android.net.Uri; |  | ||||||
| import android.util.Log; |  | ||||||
| 
 |  | ||||||
| /** |  | ||||||
|  * Class to test MoveRemoteFileOperation |  | ||||||
|  * |  | ||||||
|  * With this TestCase we are experimenting a bit to improve the test suite design, in two aspects: |  | ||||||
|  *  |  | ||||||
|  *  - Reduce the dependency from the set of test cases on the "test project" needed to  |  | ||||||
|  *  have an instrumented APK to install in the device, as required by the testing framework |  | ||||||
|  *  provided by Android. To get there, this class avoids calling TestActivity methods in the test  |  | ||||||
|  *  method. |  | ||||||
|  *   |  | ||||||
|  *  - Reduce the impact of creating a remote fixture over the Internet, while the structure of the  |  | ||||||
|  *  TestCase is kept easy to maintain. To get this, all the tests are done in a single test method,  |  | ||||||
|  *  granting this way that setUp and tearDown are run only once. |  | ||||||
|  * |  | ||||||
|  *   |  | ||||||
|  * @author David A. Velasco |  | ||||||
|  */ |  | ||||||
| 
 |  | ||||||
| //public class MoveFileTest extends AndroidTestCase { |  | ||||||
| public class MoveFileTest extends RemoteTest { |  | ||||||
| 
 |  | ||||||
| 	private static final String LOG_TAG = MoveFileTest.class.getCanonicalName(); |  | ||||||
| 	 |  | ||||||
| 	 |  | ||||||
| 	/// Paths to files and folders in fixture |  | ||||||
| 	 |  | ||||||
| 	private static final String SRC_BASE_FOLDER = "/src/"; |  | ||||||
| 	private static final String TARGET_BASE_FOLDER = "/target/"; |  | ||||||
| 	private static final String NO_FILE = "nofile.txt"; |  | ||||||
| 	private static final String FILE1 = "file1.txt"; |  | ||||||
| 	private static final String FILE2 = "file2.txt"; |  | ||||||
| 	private static final String FILE3 = "file3.txt"; |  | ||||||
| 	private static final String FILE4 = "file4.txt"; |  | ||||||
| 	private static final String FILE5 = "file5.txt"; |  | ||||||
| 	private static final String FILE6 = "file6.txt"; |  | ||||||
| 	private static final String FILE7 = "file7.txt"; |  | ||||||
| 	private static final String EMPTY = "empty/"; |  | ||||||
| 	private static final String NO_FOLDER = "nofolder/"; |  | ||||||
| 	private static final String FOLDER1 = "folder1/"; |  | ||||||
| 	private static final String FOLDER2 = "folder2/"; |  | ||||||
| 	private static final String FOLDER3 = "folder3/"; |  | ||||||
| 	private static final String FOLDER4 = "folder4/"; |  | ||||||
| 
 |  | ||||||
| 	private static final String SRC_PATH_TO_FILE_1 = SRC_BASE_FOLDER + FILE1; |  | ||||||
| 	private static final String TARGET_PATH_TO_FILE_1 = TARGET_BASE_FOLDER + FILE1; |  | ||||||
| 
 |  | ||||||
| 	private static final String SRC_PATH_TO_FILE_2 = SRC_BASE_FOLDER + FILE2; |  | ||||||
| 	private static final String TARGET_PATH_TO_FILE_2_RENAMED =  |  | ||||||
| 			TARGET_BASE_FOLDER + "renamed_" + FILE2; |  | ||||||
| 
 |  | ||||||
| 	private static final String SRC_PATH_TO_FILE_3 = SRC_BASE_FOLDER + FILE3; |  | ||||||
| 	private static final String SRC_PATH_TO_FILE_3_RENAMED = SRC_BASE_FOLDER + "renamed_" + FILE3; |  | ||||||
| 
 |  | ||||||
| 	private static final String SRC_PATH_TO_FILE_4 = SRC_BASE_FOLDER + FILE4; |  | ||||||
| 	 |  | ||||||
| 	private static final String SRC_PATH_TO_FILE_5 = SRC_BASE_FOLDER + FILE5; |  | ||||||
| 
 |  | ||||||
| 	private static final String SRC_PATH_TO_FILE_6 = SRC_BASE_FOLDER + FILE6; |  | ||||||
| 	 |  | ||||||
| 	private static final String SRC_PATH_TO_FILE_7 = SRC_BASE_FOLDER + FILE7; |  | ||||||
| 	 |  | ||||||
| 	private static final String SRC_PATH_TO_NON_EXISTENT_FILE = SRC_BASE_FOLDER + NO_FILE; |  | ||||||
| 
 |  | ||||||
| 	private static final String SRC_PATH_TO_EMPTY_FOLDER = SRC_BASE_FOLDER + EMPTY; |  | ||||||
| 	private static final String TARGET_PATH_TO_EMPTY_FOLDER = TARGET_BASE_FOLDER + EMPTY; |  | ||||||
| 
 |  | ||||||
| 	private static final String SRC_PATH_TO_FULL_FOLDER_1 = SRC_BASE_FOLDER + FOLDER1; |  | ||||||
| 	private static final String TARGET_PATH_TO_FULL_FOLDER_1 = TARGET_BASE_FOLDER + FOLDER1; |  | ||||||
| 
 |  | ||||||
| 	private static final String SRC_PATH_TO_FULL_FOLDER_2 = SRC_BASE_FOLDER + FOLDER2; |  | ||||||
| 
 |  | ||||||
| 	private static final String TARGET_PATH_TO_FULL_FOLDER_2_RENAMED =  |  | ||||||
| 			TARGET_BASE_FOLDER + "renamed_" + FOLDER2; |  | ||||||
| 
 |  | ||||||
| 	private static final String SRC_PATH_TO_FULL_FOLDER_3 = SRC_BASE_FOLDER + FOLDER3; |  | ||||||
| 	private static final String SRC_PATH_TO_FULL_FOLDER_4 = SRC_BASE_FOLDER + FOLDER4; |  | ||||||
| 
 |  | ||||||
| 	private static final String SRC_PATH_TO_FULL_FOLDER_3_RENAMED =  |  | ||||||
| 			SRC_BASE_FOLDER + "renamed_" + FOLDER3; |  | ||||||
| 
 |  | ||||||
| 	private static final String TARGET_PATH_RENAMED_WITH_INVALID_CHARS = |  | ||||||
| 					SRC_BASE_FOLDER + "renamed:??_" + FILE6; |  | ||||||
| 
 |  | ||||||
| 	private static final String TARGET_PATH_TO_ALREADY_EXISTENT_EMPTY_FOLDER_4 = TARGET_BASE_FOLDER  |  | ||||||
| 			+ FOLDER4; |  | ||||||
| 	 |  | ||||||
| 	private static final String TARGET_PATH_TO_NON_EXISTENT_FILE = TARGET_BASE_FOLDER + NO_FILE; |  | ||||||
| 
 |  | ||||||
| 	private static final String TARGET_PATH_TO_FILE_5_INTO_NON_EXISTENT_FOLDER =  |  | ||||||
| 			TARGET_BASE_FOLDER + NO_FOLDER + FILE5; |  | ||||||
| 
 |  | ||||||
| 	private static final String TARGET_PATH_TO_ALREADY_EXISTENT_FILE_7 = TARGET_BASE_FOLDER + FILE7; |  | ||||||
| 	 |  | ||||||
| 	private static final String[] FOLDERS_IN_FIXTURE = { |  | ||||||
| 		SRC_PATH_TO_EMPTY_FOLDER, |  | ||||||
| 		 |  | ||||||
| 		SRC_PATH_TO_FULL_FOLDER_1, |  | ||||||
| 		SRC_PATH_TO_FULL_FOLDER_1 + FOLDER1, |  | ||||||
| 		SRC_PATH_TO_FULL_FOLDER_1 + FOLDER2, |  | ||||||
| 		SRC_PATH_TO_FULL_FOLDER_1 + FOLDER2 + FOLDER1, |  | ||||||
| 		SRC_PATH_TO_FULL_FOLDER_1 + FOLDER2 + FOLDER2, |  | ||||||
| 		 |  | ||||||
| 		SRC_PATH_TO_FULL_FOLDER_2, |  | ||||||
| 		SRC_PATH_TO_FULL_FOLDER_2 + FOLDER1, |  | ||||||
| 		SRC_PATH_TO_FULL_FOLDER_2 + FOLDER2, |  | ||||||
| 		SRC_PATH_TO_FULL_FOLDER_2 + FOLDER2 + FOLDER1, |  | ||||||
| 		SRC_PATH_TO_FULL_FOLDER_2 + FOLDER2 + FOLDER2, |  | ||||||
| 		 |  | ||||||
| 		SRC_PATH_TO_FULL_FOLDER_3, |  | ||||||
| 		SRC_PATH_TO_FULL_FOLDER_3 + FOLDER1, |  | ||||||
| 		SRC_PATH_TO_FULL_FOLDER_3 + FOLDER2, |  | ||||||
| 		SRC_PATH_TO_FULL_FOLDER_3 + FOLDER2 + FOLDER1, |  | ||||||
| 		SRC_PATH_TO_FULL_FOLDER_3 + FOLDER2 + FOLDER2, |  | ||||||
| 		 |  | ||||||
| 		SRC_PATH_TO_FULL_FOLDER_4, |  | ||||||
| 		SRC_PATH_TO_FULL_FOLDER_4 + FOLDER1, |  | ||||||
| 		SRC_PATH_TO_FULL_FOLDER_4 + FOLDER2, |  | ||||||
| 		SRC_PATH_TO_FULL_FOLDER_4 + FOLDER2 + FOLDER1, |  | ||||||
| 		SRC_PATH_TO_FULL_FOLDER_4 + FOLDER2 + FOLDER2, |  | ||||||
| 
 |  | ||||||
| 		TARGET_BASE_FOLDER, |  | ||||||
| 		TARGET_PATH_TO_ALREADY_EXISTENT_EMPTY_FOLDER_4 |  | ||||||
| 	}; |  | ||||||
| 	 |  | ||||||
| 	private static final String[] FILES_IN_FIXTURE = { |  | ||||||
| 		SRC_PATH_TO_FILE_1, |  | ||||||
| 		SRC_PATH_TO_FILE_2, |  | ||||||
| 		SRC_PATH_TO_FILE_3, |  | ||||||
| 		SRC_PATH_TO_FILE_4, |  | ||||||
| 		SRC_PATH_TO_FILE_5, |  | ||||||
| 		 |  | ||||||
| 		SRC_PATH_TO_FULL_FOLDER_1 + FILE1, |  | ||||||
| 		SRC_PATH_TO_FULL_FOLDER_1 + FOLDER2 + FILE1, |  | ||||||
| 		SRC_PATH_TO_FULL_FOLDER_1 + FOLDER2 + FILE2, |  | ||||||
| 		SRC_PATH_TO_FULL_FOLDER_1 + FOLDER2 + FOLDER2 + FILE2, |  | ||||||
| 		 |  | ||||||
| 		SRC_PATH_TO_FULL_FOLDER_2 + FILE1, |  | ||||||
| 		SRC_PATH_TO_FULL_FOLDER_2 + FOLDER2 + FILE1, |  | ||||||
| 		SRC_PATH_TO_FULL_FOLDER_2 + FOLDER2 + FILE2, |  | ||||||
| 		SRC_PATH_TO_FULL_FOLDER_2 + FOLDER2 + FOLDER2 + FILE2, |  | ||||||
| 		 |  | ||||||
| 		SRC_PATH_TO_FULL_FOLDER_3 + FILE1, |  | ||||||
| 		SRC_PATH_TO_FULL_FOLDER_3 + FOLDER2 + FILE1, |  | ||||||
| 		SRC_PATH_TO_FULL_FOLDER_3 + FOLDER2 + FILE2, |  | ||||||
| 		SRC_PATH_TO_FULL_FOLDER_3 + FOLDER2 + FOLDER2 + FILE2, |  | ||||||
| 		 |  | ||||||
| 		SRC_PATH_TO_FULL_FOLDER_4 + FILE1, |  | ||||||
| 		SRC_PATH_TO_FULL_FOLDER_4 + FOLDER2 + FILE1, |  | ||||||
| 		SRC_PATH_TO_FULL_FOLDER_4 + FOLDER2 + FILE2, |  | ||||||
| 		SRC_PATH_TO_FULL_FOLDER_4 + FOLDER2 + FOLDER2 + FILE2,  |  | ||||||
| 		 |  | ||||||
| 		TARGET_PATH_TO_ALREADY_EXISTENT_FILE_7 |  | ||||||
| 	}; |  | ||||||
| 
 |  | ||||||
| 	 |  | ||||||
| 	String mServerUri, mUser, mPass; |  | ||||||
| 	OwnCloudClient mClient = null; |  | ||||||
| 	 |  | ||||||
| 	public MoveFileTest() { |  | ||||||
| 		super(); |  | ||||||
| 		 |  | ||||||
| 		Protocol pr = Protocol.getProtocol("https"); |  | ||||||
| 		if (pr == null || !(pr.getSocketFactory() instanceof SelfSignedConfidentSslSocketFactory)) { |  | ||||||
| 			try { |  | ||||||
| 				ProtocolSocketFactory psf = new SelfSignedConfidentSslSocketFactory(); |  | ||||||
| 				Protocol.registerProtocol( |  | ||||||
| 						"https", |  | ||||||
| 						new Protocol("https", psf, 443)); |  | ||||||
| 				 |  | ||||||
| 			} catch (GeneralSecurityException e) { |  | ||||||
| 				throw new AssertionFailedError( |  | ||||||
| 						"Self-signed confident SSL context could not be loaded"); |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 		 |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 	protected Context getContext() { |  | ||||||
| 		return getActivity(); |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 	@Override |  | ||||||
| 	protected void setUp() throws Exception { |  | ||||||
| 	    super.setUp(); |  | ||||||
| 
 |  | ||||||
| 	    // Next initialization cannot be done in the constructor because getContext() is not  |  | ||||||
| 	    // ready yet, returns NULL. |  | ||||||
| 	    initAccessToServer(getContext()); |  | ||||||
| 	     |  | ||||||
| 	    Log.v(LOG_TAG, "Setting up the remote fixture..."); |  | ||||||
| 	     |  | ||||||
| 	    RemoteOperationResult result = null; |  | ||||||
| 	    for (String folderPath : FOLDERS_IN_FIXTURE) { |  | ||||||
| 	    	result = TestActivity.createFolder(mBaseFolderPath + folderPath, true, mClient); |  | ||||||
| 			if (!result.isSuccess() && result.getCode() != ResultCode.TIMEOUT) { |  | ||||||
| 				Utils.logAndThrow(LOG_TAG, result); |  | ||||||
| 			}	    	 |  | ||||||
| 	    } |  | ||||||
| 	     |  | ||||||
| 	    File txtFile = TestActivity.extractAsset( |  | ||||||
| 	    		TestActivity.ASSETS__TEXT_FILE_NAME, getContext() |  | ||||||
| 		); |  | ||||||
| 	    for (String filePath : FILES_IN_FIXTURE) { |  | ||||||
| 	    	result = TestActivity.uploadFile( |  | ||||||
| 	    			txtFile.getAbsolutePath(), mBaseFolderPath + filePath, "txt/plain", mClient |  | ||||||
| 			); |  | ||||||
| 			if (!result.isSuccess()) { |  | ||||||
| 				Utils.logAndThrow(LOG_TAG, result); |  | ||||||
| 			} |  | ||||||
| 	    } |  | ||||||
| 		 |  | ||||||
| 		Log.v(LOG_TAG, "Remote fixture created."); |  | ||||||
| 		 |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 	/** |  | ||||||
| 	 * Test move folder |  | ||||||
| 	 */ |  | ||||||
| 	public void testMoveRemoteFileOperation() { |  | ||||||
| 		Log.v(LOG_TAG, "testMoveFolder in"); |  | ||||||
| 
 |  | ||||||
| 		/// successful cases |  | ||||||
| 
 |  | ||||||
| 		// move file |  | ||||||
| 		MoveRemoteFileOperation moveOperation = new MoveRemoteFileOperation( |  | ||||||
| 				mBaseFolderPath + SRC_PATH_TO_FILE_1, |  | ||||||
| 				mBaseFolderPath + TARGET_PATH_TO_FILE_1, |  | ||||||
| 				false |  | ||||||
| 		); |  | ||||||
| 		RemoteOperationResult result = moveOperation.execute(mClient); |  | ||||||
| 		assertTrue(result.isSuccess()); |  | ||||||
| 		 |  | ||||||
| 		// move & rename file, different location |  | ||||||
| 		moveOperation = new MoveRemoteFileOperation( |  | ||||||
| 				mBaseFolderPath + SRC_PATH_TO_FILE_2, |  | ||||||
| 				mBaseFolderPath + TARGET_PATH_TO_FILE_2_RENAMED, |  | ||||||
| 				false |  | ||||||
| 		); |  | ||||||
| 		result = moveOperation.execute(mClient); |  | ||||||
| 		assertTrue(result.isSuccess()); |  | ||||||
| 		 |  | ||||||
| 		// move & rename file, same location (rename file) |  | ||||||
| 		moveOperation = new MoveRemoteFileOperation( |  | ||||||
| 				mBaseFolderPath + SRC_PATH_TO_FILE_3, |  | ||||||
| 				mBaseFolderPath + SRC_PATH_TO_FILE_3_RENAMED, |  | ||||||
| 				false |  | ||||||
| 		); |  | ||||||
| 		result = moveOperation.execute(mClient); |  | ||||||
| 		assertTrue(result.isSuccess()); |  | ||||||
| 		 |  | ||||||
| 		// move empty folder |  | ||||||
| 		moveOperation = new MoveRemoteFileOperation( |  | ||||||
| 				mBaseFolderPath + SRC_PATH_TO_EMPTY_FOLDER, |  | ||||||
| 				mBaseFolderPath + TARGET_PATH_TO_EMPTY_FOLDER, |  | ||||||
| 				false |  | ||||||
| 		); |  | ||||||
| 		result = moveOperation.execute(mClient); |  | ||||||
| 		assertTrue(result.isSuccess()); |  | ||||||
| 		 |  | ||||||
| 		// move non-empty folder |  | ||||||
| 		moveOperation = new MoveRemoteFileOperation( |  | ||||||
| 				mBaseFolderPath + SRC_PATH_TO_FULL_FOLDER_1, |  | ||||||
| 				mBaseFolderPath + TARGET_PATH_TO_FULL_FOLDER_1, |  | ||||||
| 				false |  | ||||||
| 		); |  | ||||||
| 		result = moveOperation.execute(mClient); |  | ||||||
| 		assertTrue(result.isSuccess()); |  | ||||||
| 		 |  | ||||||
| 		// move & rename folder, different location |  | ||||||
| 		moveOperation = new MoveRemoteFileOperation( |  | ||||||
| 				mBaseFolderPath + SRC_PATH_TO_FULL_FOLDER_2, |  | ||||||
| 				mBaseFolderPath + TARGET_PATH_TO_FULL_FOLDER_2_RENAMED, |  | ||||||
| 				false |  | ||||||
| 		); |  | ||||||
| 		result = moveOperation.execute(mClient); |  | ||||||
| 		assertTrue(result.isSuccess()); |  | ||||||
| 		 |  | ||||||
| 		// move & rename folder, same location (rename folder) |  | ||||||
| 		moveOperation = new MoveRemoteFileOperation( |  | ||||||
| 				mBaseFolderPath + SRC_PATH_TO_FULL_FOLDER_3, |  | ||||||
| 				mBaseFolderPath + SRC_PATH_TO_FULL_FOLDER_3_RENAMED, |  | ||||||
| 				false |  | ||||||
| 		); |  | ||||||
| 		result = moveOperation.execute(mClient); |  | ||||||
| 		assertTrue(result.isSuccess()); |  | ||||||
| 		 |  | ||||||
| 		// move for nothing (success, but no interaction with network) |  | ||||||
| 		moveOperation = new MoveRemoteFileOperation( |  | ||||||
| 				mBaseFolderPath + SRC_PATH_TO_FILE_4, |  | ||||||
| 				mBaseFolderPath + SRC_PATH_TO_FILE_4, |  | ||||||
| 				false |  | ||||||
| 		); |  | ||||||
| 		result = moveOperation.execute(mClient); |  | ||||||
| 		assertTrue(result.isSuccess()); |  | ||||||
| 		 |  | ||||||
| 		// move overwriting |  | ||||||
| 		moveOperation = new MoveRemoteFileOperation( |  | ||||||
| 				mBaseFolderPath + SRC_PATH_TO_FULL_FOLDER_4, |  | ||||||
| 				mBaseFolderPath + TARGET_PATH_TO_ALREADY_EXISTENT_EMPTY_FOLDER_4, |  | ||||||
| 				true |  | ||||||
| 		); |  | ||||||
| 		result = moveOperation.execute(mClient); |  | ||||||
| 		assertTrue(result.isSuccess()); |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 		/// Failed cases |  | ||||||
| 		 |  | ||||||
| 		// file to move does not exist |  | ||||||
| 		moveOperation = new MoveRemoteFileOperation( |  | ||||||
| 				mBaseFolderPath + SRC_PATH_TO_NON_EXISTENT_FILE, |  | ||||||
| 				mBaseFolderPath + TARGET_PATH_TO_NON_EXISTENT_FILE, |  | ||||||
| 				false |  | ||||||
| 		); |  | ||||||
| 		result = moveOperation.execute(mClient); |  | ||||||
| 		assertTrue(result.getCode() == ResultCode.FILE_NOT_FOUND); |  | ||||||
| 
 |  | ||||||
| 		// folder to move into does no exist |  | ||||||
| 		moveOperation = new MoveRemoteFileOperation( |  | ||||||
| 				mBaseFolderPath + SRC_PATH_TO_FILE_5, |  | ||||||
| 				mBaseFolderPath + TARGET_PATH_TO_FILE_5_INTO_NON_EXISTENT_FOLDER, |  | ||||||
| 				false |  | ||||||
| 		); |  | ||||||
| 		result = moveOperation.execute(mClient); |  | ||||||
| 		assertTrue(result.getHttpCode() == HttpConstants.HTTP_CONFLICT); |  | ||||||
| 
 |  | ||||||
| 		// target location (renaming) has invalid characters |  | ||||||
| 		moveOperation = new MoveRemoteFileOperation( |  | ||||||
| 				mBaseFolderPath + SRC_PATH_TO_FILE_6, |  | ||||||
| 				mBaseFolderPath + TARGET_PATH_RENAMED_WITH_INVALID_CHARS, |  | ||||||
| 				false |  | ||||||
| 		); |  | ||||||
| 		result = moveOperation.execute(mClient); |  | ||||||
| 		assertTrue(result.getCode() == ResultCode.INVALID_CHARACTER_IN_NAME); |  | ||||||
| 
 |  | ||||||
| 		// name collision |  | ||||||
| 		moveOperation = new MoveRemoteFileOperation( |  | ||||||
| 				mBaseFolderPath + SRC_PATH_TO_FILE_7, |  | ||||||
| 				mBaseFolderPath + TARGET_PATH_TO_ALREADY_EXISTENT_FILE_7, |  | ||||||
| 				false |  | ||||||
| 		); |  | ||||||
| 		result = moveOperation.execute(mClient); |  | ||||||
| 		assertTrue(result.getCode() == ResultCode.INVALID_OVERWRITE); |  | ||||||
| 
 |  | ||||||
| 		// move a folder into a descendant |  | ||||||
| 		moveOperation = new MoveRemoteFileOperation( |  | ||||||
| 				mBaseFolderPath + SRC_BASE_FOLDER, |  | ||||||
| 				mBaseFolderPath + SRC_PATH_TO_EMPTY_FOLDER, |  | ||||||
| 				false |  | ||||||
| 		); |  | ||||||
| 		result = moveOperation.execute(mClient); |  | ||||||
| 		assertTrue(result.getCode() == ResultCode.INVALID_MOVE_INTO_DESCENDANT); |  | ||||||
| 		 |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 	@Override |  | ||||||
| 	protected void tearDown() throws Exception { |  | ||||||
| 	    Log.v(LOG_TAG, "Deleting remote fixture..."); |  | ||||||
| 	     |  | ||||||
| 		String[] mPathsToCleanUp = { |  | ||||||
| 				mBaseFolderPath + SRC_BASE_FOLDER, |  | ||||||
| 				mBaseFolderPath + TARGET_BASE_FOLDER |  | ||||||
| 		}; |  | ||||||
| 		 |  | ||||||
| 		for (String path : mPathsToCleanUp) { |  | ||||||
| 			RemoteOperationResult removeResult =  |  | ||||||
| 					TestActivity.removeFile(path, mClient); |  | ||||||
| 			if (!removeResult.isSuccess() && removeResult.getCode() != ResultCode.TIMEOUT ) { |  | ||||||
| 				Utils.logAndThrow(LOG_TAG, removeResult); |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 		 |  | ||||||
| 		super.tearDown(); |  | ||||||
| 		 |  | ||||||
| 	    Log.v(LOG_TAG, "Remote fixture delete."); |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	 |  | ||||||
| 	private void initAccessToServer(Context context) { |  | ||||||
| 	    Log.v(LOG_TAG, "Setting up client instance to access OC server..."); |  | ||||||
| 		 |  | ||||||
| 		mServerUri = context.getString(R.string.server_base_url); |  | ||||||
| 		mUser = context.getString(R.string.username); |  | ||||||
| 		mPass = context.getString(R.string.password); |  | ||||||
| 		 |  | ||||||
| 		mClient = new OwnCloudClient( |  | ||||||
| 				Uri.parse(mServerUri),  |  | ||||||
| 				NetworkUtils.getMultiThreadedConnManager() |  | ||||||
| 		); |  | ||||||
| 		mClient.setDefaultTimeouts( |  | ||||||
| 				OwnCloudClientFactory.DEFAULT_DATA_TIMEOUT,  |  | ||||||
| 				OwnCloudClientFactory.DEFAULT_CONNECTION_TIMEOUT); |  | ||||||
| 		mClient.setFollowRedirects(true); |  | ||||||
| 		mClient.setCredentials( |  | ||||||
| 				OwnCloudCredentialsFactory.newBasicCredentials( |  | ||||||
| 						mUser,  |  | ||||||
| 						mPass |  | ||||||
| 				) |  | ||||||
| 		); |  | ||||||
| 		 |  | ||||||
| 	    Log.v(LOG_TAG, "Client instance set up."); |  | ||||||
| 	     |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 	 |  | ||||||
| } |  | ||||||
| @ -1,155 +0,0 @@ | |||||||
| /* ownCloud Android Library is available under MIT license |  | ||||||
|  *   Copyright (C) 2016 ownCloud GmbH. |  | ||||||
|  *    |  | ||||||
|  *   Permission is hereby granted, free of charge, to any person obtaining a copy |  | ||||||
|  *   of this software and associated documentation files (the "Software"), to deal |  | ||||||
|  *   in the Software without restriction, including without limitation the rights |  | ||||||
|  *   to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |  | ||||||
|  *   copies of the Software, and to permit persons to whom the Software is |  | ||||||
|  *   furnished to do so, subject to the following conditions: |  | ||||||
|  *    |  | ||||||
|  *   The above copyright notice and this permission notice shall be included in |  | ||||||
|  *   all copies or substantial portions of the Software. |  | ||||||
|  *    |  | ||||||
|  *   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,  |  | ||||||
|  *   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |  | ||||||
|  *   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND  |  | ||||||
|  *   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS  |  | ||||||
|  *   BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN  |  | ||||||
|  *   ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN  |  | ||||||
|  *   CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |  | ||||||
|  *   THE SOFTWARE. |  | ||||||
|  * |  | ||||||
|  */ |  | ||||||
| package com.owncloud.android.lib.test_project.test; |  | ||||||
| 
 |  | ||||||
| import com.owncloud.android.lib.common.OwnCloudClientManager; |  | ||||||
| import com.owncloud.android.lib.common.OwnCloudClientManagerFactory; |  | ||||||
| import com.owncloud.android.lib.common.SingleSessionManager; |  | ||||||
| import com.owncloud.android.lib.common.OwnCloudClientManagerFactory.Policy; |  | ||||||
| import com.owncloud.android.lib.common.SimpleFactoryManager; |  | ||||||
| 
 |  | ||||||
| import junit.framework.AssertionFailedError; |  | ||||||
| import junit.framework.TestCase; |  | ||||||
| 
 |  | ||||||
| /** |  | ||||||
|  * Unit test for OwnCloudClientManagerFactory |  | ||||||
|  *  |  | ||||||
|  * @author David A. Velasco |  | ||||||
|  */ |  | ||||||
| public class OwnCloudClientManagerFactoryTest extends TestCase { |  | ||||||
| 	 |  | ||||||
| 	@Override |  | ||||||
| 	protected void setUp() { |  | ||||||
| 		OwnCloudClientManagerFactory.setDefaultPolicy(Policy.ALWAYS_NEW_CLIENT); |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	public void testGetDefaultPolicy() { |  | ||||||
| 		Policy defaultPolicy = OwnCloudClientManagerFactory.getDefaultPolicy(); |  | ||||||
| 		assertNotNull("Returned null value", defaultPolicy); |  | ||||||
| 		assertTrue("Returned unknown value",  |  | ||||||
| 						(Policy.ALWAYS_NEW_CLIENT.equals(defaultPolicy) || |  | ||||||
| 						(Policy.SINGLE_SESSION_PER_ACCOUNT.equals(defaultPolicy)))); |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 	public void testSetDefaultPolicy() { |  | ||||||
| 		OwnCloudClientManagerFactory.setDefaultPolicy(Policy.SINGLE_SESSION_PER_ACCOUNT); |  | ||||||
| 		Policy defaultPolicy = OwnCloudClientManagerFactory.getDefaultPolicy(); |  | ||||||
| 		assertEquals("SINGLE_SESSION_PER_ACCOUNT not set",  |  | ||||||
| 				Policy.SINGLE_SESSION_PER_ACCOUNT, defaultPolicy); |  | ||||||
| 		 |  | ||||||
| 		OwnCloudClientManagerFactory.setDefaultPolicy(Policy.ALWAYS_NEW_CLIENT); |  | ||||||
| 		defaultPolicy = OwnCloudClientManagerFactory.getDefaultPolicy(); |  | ||||||
| 		assertEquals("ALWAYS_NEW_CLIENT not set", Policy.ALWAYS_NEW_CLIENT, defaultPolicy); |  | ||||||
| 		 |  | ||||||
| 		try { |  | ||||||
| 			OwnCloudClientManagerFactory.setDefaultPolicy(null); |  | ||||||
| 			throw new AssertionFailedError("Accepted NULL parameter"); |  | ||||||
| 			 |  | ||||||
| 		} catch(Exception e) { |  | ||||||
| 			assertTrue("Unexpected exception when setting default policy null",  |  | ||||||
| 					(e instanceof IllegalArgumentException)); |  | ||||||
| 		} |  | ||||||
| 		defaultPolicy = OwnCloudClientManagerFactory.getDefaultPolicy(); |  | ||||||
| 		assertEquals("ALWAYS_NEW_CLIENT changed after setting null",  |  | ||||||
| 				Policy.ALWAYS_NEW_CLIENT, defaultPolicy); |  | ||||||
| 		 |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	 |  | ||||||
| 	public void testGetDefaultSingleton() { |  | ||||||
| 		OwnCloudClientManager mgr = OwnCloudClientManagerFactory.getDefaultSingleton(); |  | ||||||
| 		assertNotNull("Returned NULL default singleton", mgr); |  | ||||||
| 		assertTrue("Default singleton does not implement default policy",  |  | ||||||
| 				mgr instanceof SimpleFactoryManager); |  | ||||||
| 		 |  | ||||||
| 		OwnCloudClientManager mgr2 = OwnCloudClientManagerFactory.getDefaultSingleton(); |  | ||||||
| 		assertSame("Not singleton", mgr, mgr2); |  | ||||||
| 		 |  | ||||||
| 		OwnCloudClientManagerFactory.setDefaultPolicy(Policy.SINGLE_SESSION_PER_ACCOUNT); |  | ||||||
| 		mgr = OwnCloudClientManagerFactory.getDefaultSingleton(); |  | ||||||
| 		assertNotNull("Returned NULL default singleton", mgr); |  | ||||||
| 		assertTrue("Default singleton does not implement default policy",  |  | ||||||
| 				mgr instanceof SingleSessionManager); |  | ||||||
| 		 |  | ||||||
| 		mgr2 = OwnCloudClientManagerFactory.getDefaultSingleton(); |  | ||||||
| 		assertSame("Not singleton", mgr, mgr2); |  | ||||||
| 	} |  | ||||||
|      |  | ||||||
| 	 |  | ||||||
| 	public void testNewDefaultOwnCloudClientManager() { |  | ||||||
| 		OwnCloudClientManager mgr = OwnCloudClientManagerFactory.newDefaultOwnCloudClientManager(); |  | ||||||
| 		assertNotNull("Returned NULL default manager", mgr); |  | ||||||
| 		assertTrue("New manager does not implement default policy",  |  | ||||||
| 				mgr instanceof SimpleFactoryManager); |  | ||||||
| 		assertNotSame("Not new instance",  |  | ||||||
| 				mgr, OwnCloudClientManagerFactory.getDefaultSingleton()); |  | ||||||
| 		assertNotSame("Not new instance",  |  | ||||||
| 				mgr, OwnCloudClientManagerFactory.newDefaultOwnCloudClientManager()); |  | ||||||
| 		 |  | ||||||
| 		OwnCloudClientManagerFactory.setDefaultPolicy(Policy.SINGLE_SESSION_PER_ACCOUNT); |  | ||||||
| 		mgr = OwnCloudClientManagerFactory.newDefaultOwnCloudClientManager(); |  | ||||||
| 		assertNotNull("Returned NULL default manager", mgr); |  | ||||||
| 		assertTrue("New manager does not implement default policy",  |  | ||||||
| 				mgr instanceof SingleSessionManager); |  | ||||||
| 		assertNotSame("Not new instance",  |  | ||||||
| 				mgr, OwnCloudClientManagerFactory.getDefaultSingleton()); |  | ||||||
| 		assertNotSame("Not new instance",  |  | ||||||
| 				mgr, OwnCloudClientManagerFactory.newDefaultOwnCloudClientManager()); |  | ||||||
| 		 |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 	 |  | ||||||
| 	public void testNewOwnCloudClientManager() { |  | ||||||
| 		OwnCloudClientManager mgr = OwnCloudClientManagerFactory. |  | ||||||
| 				newOwnCloudClientManager(Policy.ALWAYS_NEW_CLIENT); |  | ||||||
| 		 |  | ||||||
| 		assertNotNull("Returned NULL manager", mgr); |  | ||||||
| 		assertTrue("New manager does not implement policy ALWAYS_NEW_CLIENT",  |  | ||||||
| 				mgr instanceof SimpleFactoryManager); |  | ||||||
| 		assertNotSame("Not new instance",  |  | ||||||
| 				mgr, OwnCloudClientManagerFactory.getDefaultSingleton()); |  | ||||||
| 		assertNotSame("Not new instance",  |  | ||||||
| 				mgr, OwnCloudClientManagerFactory.newDefaultOwnCloudClientManager()); |  | ||||||
| 		assertNotSame("Not new instance",  |  | ||||||
| 				mgr, OwnCloudClientManagerFactory.newOwnCloudClientManager( |  | ||||||
| 						Policy.ALWAYS_NEW_CLIENT)); |  | ||||||
| 		 |  | ||||||
| 		 |  | ||||||
| 		OwnCloudClientManager mgr2 = OwnCloudClientManagerFactory. |  | ||||||
| 				newOwnCloudClientManager(Policy.SINGLE_SESSION_PER_ACCOUNT); |  | ||||||
| 		 |  | ||||||
| 		assertNotNull("Returned NULL manager", mgr2); |  | ||||||
| 		assertTrue("New manager does not implement policy SINGLE_SESSION_PER_ACCOUNT",  |  | ||||||
| 				mgr2 instanceof SingleSessionManager); |  | ||||||
| 		assertNotSame("Not new instance",  |  | ||||||
| 				mgr2, OwnCloudClientManagerFactory.getDefaultSingleton()); |  | ||||||
| 		assertNotSame("Not new instance",  |  | ||||||
| 				mgr2, OwnCloudClientManagerFactory.newDefaultOwnCloudClientManager()); |  | ||||||
| 		assertNotSame("Not new instance",  |  | ||||||
| 				mgr2, OwnCloudClientManagerFactory.newOwnCloudClientManager( |  | ||||||
| 						Policy.SINGLE_SESSION_PER_ACCOUNT)); |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	 |  | ||||||
| } |  | ||||||
| @ -1,375 +0,0 @@ | |||||||
| /* ownCloud Android Library is available under MIT license |  | ||||||
|  *   Copyright (C) 2016 ownCloud GmbH. |  | ||||||
|  *    |  | ||||||
|  *   Permission is hereby granted, free of charge, to any person obtaining a copy |  | ||||||
|  *   of this software and associated documentation files (the "Software"), to deal |  | ||||||
|  *   in the Software without restriction, including without limitation the rights |  | ||||||
|  *   to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |  | ||||||
|  *   copies of the Software, and to permit persons to whom the Software is |  | ||||||
|  *   furnished to do so, subject to the following conditions: |  | ||||||
|  *    |  | ||||||
|  *   The above copyright notice and this permission notice shall be included in |  | ||||||
|  *   all copies or substantial portions of the Software. |  | ||||||
|  *    |  | ||||||
|  *   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,  |  | ||||||
|  *   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |  | ||||||
|  *   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND  |  | ||||||
|  *   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS  |  | ||||||
|  *   BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN  |  | ||||||
|  *   ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN  |  | ||||||
|  *   CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |  | ||||||
|  *   THE SOFTWARE. |  | ||||||
|  * |  | ||||||
|  */ |  | ||||||
| package com.owncloud.android.lib.test_project.test; |  | ||||||
| 
 |  | ||||||
| import java.io.IOException; |  | ||||||
| import java.io.InputStream; |  | ||||||
| import java.net.SocketTimeoutException; |  | ||||||
| import java.security.GeneralSecurityException; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| import org.apache.jackrabbit.webdav.DavConstants; |  | ||||||
| import org.apache.jackrabbit.webdav.client.methods.PropFindMethod; |  | ||||||
| 
 |  | ||||||
| import junit.framework.AssertionFailedError; |  | ||||||
| 
 |  | ||||||
| import android.net.Uri; |  | ||||||
| import android.test.AndroidTestCase; |  | ||||||
| import android.util.Log; |  | ||||||
| 
 |  | ||||||
| import com.owncloud.android.lib.common.OwnCloudClient; |  | ||||||
| import com.owncloud.android.lib.common.accounts.AccountUtils; |  | ||||||
| import com.owncloud.android.lib.common.authentication.OwnCloudCredentials; |  | ||||||
| import com.owncloud.android.lib.common.authentication.OwnCloudCredentialsFactory; |  | ||||||
| import com.owncloud.android.lib.common.network.NetworkUtils; |  | ||||||
| import com.owncloud.android.lib.test_project.R; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| /** |  | ||||||
|  * Unit test for OwnCloudClient |  | ||||||
|  *  |  | ||||||
|  * @author David A. Velasco |  | ||||||
|  */ |  | ||||||
| public class OwnCloudClientTest extends AndroidTestCase { |  | ||||||
| 	 |  | ||||||
| 	private static final String TAG = OwnCloudClientTest.class.getSimpleName(); |  | ||||||
| 	 |  | ||||||
| 	private Uri mServerUri; |  | ||||||
| 	private String mUsername; |  | ||||||
| 	private String mPassword; |  | ||||||
| 
 |  | ||||||
| 	public OwnCloudClientTest() { |  | ||||||
| 		super(); |  | ||||||
| 		 |  | ||||||
| 		Protocol pr = Protocol.getProtocol("https"); |  | ||||||
| 		if (pr == null || !(pr.getSocketFactory() instanceof SelfSignedConfidentSslSocketFactory)) { |  | ||||||
| 			try { |  | ||||||
| 				ProtocolSocketFactory psf = new SelfSignedConfidentSslSocketFactory(); |  | ||||||
| 				Protocol.registerProtocol( |  | ||||||
| 						"https", |  | ||||||
| 						new Protocol("https", psf, 443)); |  | ||||||
| 				 |  | ||||||
| 			} catch (GeneralSecurityException e) { |  | ||||||
| 				throw new AssertionFailedError( |  | ||||||
| 						"Self-signed confident SSL context could not be loaded"); |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 
 |  | ||||||
| 	@Override |  | ||||||
| 	protected void setUp() throws Exception { |  | ||||||
| 	    super.setUp(); |  | ||||||
| 		mServerUri = Uri.parse(getContext().getString(R.string.server_base_url)); |  | ||||||
| 		mUsername = getContext().getString(R.string.username); |  | ||||||
| 		mPassword = getContext().getString(R.string.password); |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 	 |  | ||||||
| 	public void testConstructor() { |  | ||||||
| 		try { |  | ||||||
| 			new OwnCloudClient(null, NetworkUtils.getMultiThreadedConnManager()); |  | ||||||
| 			throw new AssertionFailedError("Accepted NULL parameter"); |  | ||||||
| 			 |  | ||||||
| 		} catch(Exception e) { |  | ||||||
| 			assertTrue("Unexpected exception passing NULL baseUri",  |  | ||||||
| 					(e instanceof IllegalArgumentException)); |  | ||||||
| 		} |  | ||||||
| 		 |  | ||||||
| 		try { |  | ||||||
| 			new OwnCloudClient(mServerUri, null); |  | ||||||
| 			throw new AssertionFailedError("Accepted NULL parameter"); |  | ||||||
| 			 |  | ||||||
| 		} catch(Exception e) { |  | ||||||
| 			assertTrue("Unexpected exception passing NULL connectionMgr",  |  | ||||||
| 					(e instanceof IllegalArgumentException)); |  | ||||||
| 		} |  | ||||||
| 		 |  | ||||||
| 		OwnCloudClient client =  |  | ||||||
| 				new OwnCloudClient(mServerUri, NetworkUtils.getMultiThreadedConnManager()); |  | ||||||
| 		assertNotNull("OwnCloudClient instance not built", client); |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	 |  | ||||||
| 	public void testGetSetCredentials() { |  | ||||||
| 		OwnCloudClient client =  |  | ||||||
| 				new OwnCloudClient(mServerUri, NetworkUtils.getMultiThreadedConnManager()); |  | ||||||
| 		 |  | ||||||
| 		assertNotNull("Returned NULL credentials", client.getCredentials()); |  | ||||||
| 		assertEquals("Not instanced without credentials",  |  | ||||||
| 				client.getCredentials(), OwnCloudCredentialsFactory.getAnonymousCredentials()); |  | ||||||
| 		 |  | ||||||
| 		OwnCloudCredentials credentials =  |  | ||||||
| 				OwnCloudCredentialsFactory.newBasicCredentials("user", "pass"); |  | ||||||
| 		client.setCredentials(credentials); |  | ||||||
| 		assertEquals("Basic credentials not set", credentials, client.getCredentials()); |  | ||||||
| 		 |  | ||||||
| 		credentials = OwnCloudCredentialsFactory.newBearerCredentials("user", "bearerToken"); |  | ||||||
| 		client.setCredentials(credentials); |  | ||||||
| 		assertEquals("Bearer credentials not set", credentials, client.getCredentials()); |  | ||||||
| 
 |  | ||||||
| 		credentials = OwnCloudCredentialsFactory.newSamlSsoCredentials("user", "samlSessionCookie=124"); |  | ||||||
| 		client.setCredentials(credentials); |  | ||||||
| 		assertEquals("SAML2 session credentials not set", credentials, client.getCredentials()); |  | ||||||
| 		 |  | ||||||
| 	} |  | ||||||
|      |  | ||||||
| 	public void testExecuteMethodWithTimeouts() throws HttpException, IOException { |  | ||||||
| 		OwnCloudClient client =  |  | ||||||
| 				new OwnCloudClient(mServerUri, NetworkUtils.getMultiThreadedConnManager()); |  | ||||||
| 		int connectionTimeout = client.getConnectionTimeout(); |  | ||||||
| 		int readTimeout = client.getDataTimeout(); |  | ||||||
| 		 |  | ||||||
|         HeadMethod head = new HeadMethod(client.getWebdavUri() + "/"); |  | ||||||
|         try { |  | ||||||
|             client.executeMethod(head, 1, 1000); |  | ||||||
| 			throw new AssertionFailedError("Completed HEAD with impossible read timeout"); |  | ||||||
|              |  | ||||||
|         } catch (Exception e) { |  | ||||||
|             Log.e("OwnCloudClientTest", "EXCEPTION", e); |  | ||||||
|             assertTrue("Unexcepted exception " + e.getLocalizedMessage(),  |  | ||||||
|             		(e instanceof ConnectTimeoutException) ||  |  | ||||||
|             		(e instanceof SocketTimeoutException)); |  | ||||||
|              |  | ||||||
|         } finally { |  | ||||||
|             head.releaseConnection(); |  | ||||||
|         } |  | ||||||
|          |  | ||||||
|         assertEquals("Connection timeout was changed for future requests",  |  | ||||||
|         		connectionTimeout, client.getConnectionTimeout()); |  | ||||||
|         assertEquals("Read timeout was changed for future requests",  |  | ||||||
|         		readTimeout, client.getDataTimeout()); |  | ||||||
|          |  | ||||||
|         try { |  | ||||||
|             client.executeMethod(head, 1000, 1); |  | ||||||
| 			throw new AssertionFailedError("Completed HEAD with impossible connection timeout"); |  | ||||||
|              |  | ||||||
|         } catch (Exception e) { |  | ||||||
|             Log.e("OwnCloudClientTest", "EXCEPTION", e); |  | ||||||
|             assertTrue("Unexcepted exception " + e.getLocalizedMessage(),  |  | ||||||
|             		(e instanceof ConnectTimeoutException) ||  |  | ||||||
|             		(e instanceof SocketTimeoutException)); |  | ||||||
|              |  | ||||||
|         } finally { |  | ||||||
|             head.releaseConnection(); |  | ||||||
|         } |  | ||||||
|          |  | ||||||
|         assertEquals("Connection timeout was changed for future requests",  |  | ||||||
|         		connectionTimeout, client.getConnectionTimeout()); |  | ||||||
|         assertEquals("Read timeout was changed for future requests",  |  | ||||||
|         		readTimeout, client.getDataTimeout()); |  | ||||||
|          |  | ||||||
| 	} |  | ||||||
|      |  | ||||||
|      |  | ||||||
| 	public void testExecuteMethod() { |  | ||||||
| 		OwnCloudClient client =  |  | ||||||
| 				new OwnCloudClient(mServerUri, NetworkUtils.getMultiThreadedConnManager()); |  | ||||||
|         HeadMethod head = new HeadMethod(client.getWebdavUri() + "/"); |  | ||||||
|         int status = -1; |  | ||||||
|         try { |  | ||||||
|             status = client.executeMethod(head); |  | ||||||
|             assertTrue("Wrong status code returned: " + status,  |  | ||||||
|             		status > 99 && status < 600); |  | ||||||
|              |  | ||||||
|         } catch (IOException e) { |  | ||||||
|         	Log.e(TAG, "Exception in HEAD method execution", e); |  | ||||||
|         	// TODO - make it fail? ; try several times, and make it fail if none |  | ||||||
|         	//			is right? |  | ||||||
|              |  | ||||||
|         } finally { |  | ||||||
|             head.releaseConnection(); |  | ||||||
|         } |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	 |  | ||||||
| 	public void testExhaustResponse() { |  | ||||||
| 		OwnCloudClient client =  |  | ||||||
| 				new OwnCloudClient(mServerUri, NetworkUtils.getMultiThreadedConnManager()); |  | ||||||
| 
 |  | ||||||
| 		PropFindMethod propfind = null; |  | ||||||
| 		try { |  | ||||||
| 			propfind = new PropFindMethod(client.getWebdavUri() + "/", |  | ||||||
| 					DavConstants.PROPFIND_ALL_PROP, |  | ||||||
| 					DavConstants.DEPTH_0); |  | ||||||
| 			client.executeMethod(propfind); |  | ||||||
| 			InputStream responseBody = propfind.getResponseBodyAsStream(); |  | ||||||
| 			if (responseBody != null) { |  | ||||||
| 				client.exhaustResponse(responseBody); |  | ||||||
| 
 |  | ||||||
| 				try { |  | ||||||
| 					int character = responseBody.read(); |  | ||||||
| 					assertEquals("Response body was not fully exhausted",  |  | ||||||
| 							character, -1);		// -1 is acceptable |  | ||||||
| 					 |  | ||||||
| 				} catch (IOException e) { |  | ||||||
| 					// this is the preferred result |  | ||||||
| 				} |  | ||||||
| 				 |  | ||||||
| 			} else { |  | ||||||
| 	        	Log.e(TAG, "Could not test exhaustResponse due to wrong response"); |  | ||||||
| 	        	// TODO - make it fail? ; try several times, and make it fail if none |  | ||||||
| 	        	//			is right? |  | ||||||
| 			} |  | ||||||
| 	             |  | ||||||
|         } catch (IOException e) { |  | ||||||
|         	Log.e(TAG, "Exception in PROPFIND method execution", e); |  | ||||||
|         	// TODO - make it fail? ; try several times, and make it fail if none |  | ||||||
|         	//			is right? |  | ||||||
|              |  | ||||||
|         } finally { |  | ||||||
|             propfind.releaseConnection(); |  | ||||||
|         } |  | ||||||
| 		 |  | ||||||
| 		client.exhaustResponse(null);	// must run with no exception |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	 |  | ||||||
| 	public void testGetSetDefaultTimeouts() { |  | ||||||
| 		OwnCloudClient client =  |  | ||||||
| 				new OwnCloudClient(mServerUri, NetworkUtils.getMultiThreadedConnManager()); |  | ||||||
| 		 |  | ||||||
| 		int oldDataTimeout = client.getDataTimeout(); |  | ||||||
| 		int oldConnectionTimeout = client.getConnectionTimeout(); |  | ||||||
| 		 |  | ||||||
| 		client.setDefaultTimeouts(oldDataTimeout + 1000, oldConnectionTimeout + 1000); |  | ||||||
| 		assertEquals("Data timeout not set",  |  | ||||||
| 				oldDataTimeout + 1000, client.getDataTimeout()); |  | ||||||
| 		assertEquals("Connection timeout not set",  |  | ||||||
| 				oldConnectionTimeout + 1000, client.getConnectionTimeout()); |  | ||||||
| 		 |  | ||||||
| 		client.setDefaultTimeouts(0, 0); |  | ||||||
| 		assertEquals("Zero data timeout not set",  |  | ||||||
| 				0, client.getDataTimeout()); |  | ||||||
| 		assertEquals("Zero connection timeout not set",  |  | ||||||
| 				0, client.getConnectionTimeout()); |  | ||||||
| 			 |  | ||||||
| 		client.setDefaultTimeouts(-1, -1); |  | ||||||
| 		assertEquals("Negative data timeout not ignored",  |  | ||||||
| 				0, client.getDataTimeout()); |  | ||||||
| 		assertEquals("Negative connection timeout not ignored",  |  | ||||||
| 				0, client.getConnectionTimeout()); |  | ||||||
| 		 |  | ||||||
| 		client.setDefaultTimeouts(-1, 1000); |  | ||||||
| 		assertEquals("Negative data timeout not ignored",  |  | ||||||
| 				0, client.getDataTimeout()); |  | ||||||
| 		assertEquals("Connection timeout not set",  |  | ||||||
| 				1000, client.getConnectionTimeout()); |  | ||||||
| 		 |  | ||||||
| 		client.setDefaultTimeouts(1000, -1); |  | ||||||
| 		assertEquals("Data timeout not set",  |  | ||||||
| 				1000, client.getDataTimeout()); |  | ||||||
| 		assertEquals("Negative connection timeout not ignored",  |  | ||||||
| 				1000, client.getConnectionTimeout()); |  | ||||||
| 			 |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 	 |  | ||||||
| 	public void testGetWebdavUri() { |  | ||||||
| 		OwnCloudClient client =  |  | ||||||
| 				new OwnCloudClient(mServerUri, NetworkUtils.getMultiThreadedConnManager()); |  | ||||||
| 		client.setCredentials(OwnCloudCredentialsFactory.newBearerCredentials("user", "fakeToken")); |  | ||||||
| 		Uri webdavUri = client.getWebdavUri(); |  | ||||||
| 		assertTrue("WebDAV URI does not point to the right entry point", |  | ||||||
| 				webdavUri.getPath().endsWith(OwnCloudClient.WEBDAV_PATH_4_0)); |  | ||||||
| 		assertTrue("WebDAV URI is not a subpath of base URI",  |  | ||||||
| 				webdavUri.getAuthority().equals(mServerUri.getAuthority()) && |  | ||||||
| 				webdavUri.getPath().startsWith(mServerUri.getPath())); |  | ||||||
| 		 |  | ||||||
| 		client.setCredentials(OwnCloudCredentialsFactory.newBasicCredentials( |  | ||||||
| 				mUsername, mPassword)); |  | ||||||
| 		webdavUri = client.getWebdavUri(); |  | ||||||
| 		assertTrue("WebDAV URI does not point to the right entry point", |  | ||||||
| 				webdavUri.getPath().endsWith(OwnCloudClient.WEBDAV_PATH_4_0)); |  | ||||||
| 		PropFindMethod propfind = null; |  | ||||||
| 		try { |  | ||||||
| 			propfind = new PropFindMethod(webdavUri + "/", |  | ||||||
| 					DavConstants.PROPFIND_ALL_PROP, |  | ||||||
| 					DavConstants.DEPTH_0); |  | ||||||
| 			int status = client.executeMethod(propfind); |  | ||||||
| 			assertEquals("WebDAV request did not work on WebDAV URI",  |  | ||||||
| 					HttpConstants.HTTP_MULTI_STATUS, status); |  | ||||||
| 			 |  | ||||||
|         } catch (IOException e) { |  | ||||||
|         	Log.e(TAG, "Exception in PROPFIND method execution", e); |  | ||||||
|         	// TODO - make it fail? ; try several times, and make it fail if none |  | ||||||
|         	//			is right? |  | ||||||
|              |  | ||||||
|         } finally { |  | ||||||
|             propfind.releaseConnection(); |  | ||||||
|         } |  | ||||||
| 		 |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
|      |  | ||||||
| 	public void testGetSetBaseUri() { |  | ||||||
| 		OwnCloudClient client =  |  | ||||||
| 				new OwnCloudClient(mServerUri, NetworkUtils.getMultiThreadedConnManager()); |  | ||||||
| 		assertEquals("Returned base URI different that URI passed to constructor",  |  | ||||||
| 				mServerUri, client.getBaseUri()); |  | ||||||
| 		 |  | ||||||
| 		Uri otherUri = Uri.parse("https://whatever.com/basePath/here"); |  | ||||||
| 		client.setBaseUri(otherUri); |  | ||||||
| 		assertEquals("Returned base URI different that URI passed to constructor",  |  | ||||||
| 				otherUri, client.getBaseUri()); |  | ||||||
| 		 |  | ||||||
| 		try { |  | ||||||
| 			client.setBaseUri(null); |  | ||||||
| 			throw new AssertionFailedError("Accepted NULL parameter"); |  | ||||||
| 			 |  | ||||||
| 		} catch(Exception e) { |  | ||||||
| 			assertTrue("Unexpected exception passing NULL base URI",  |  | ||||||
| 					(e instanceof IllegalArgumentException)); |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	 |  | ||||||
| 	public void testGetCookiesString() { |  | ||||||
| 		// TODO implement test body |  | ||||||
| 		/*public String getCookiesString(){ |  | ||||||
| 			Cookie[] cookies = getState().getCookies();  |  | ||||||
| 			String cookiesString =""; |  | ||||||
| 			for (Cookie cookie: cookies) { |  | ||||||
| 				cookiesString = cookiesString + cookie.toString() + ";"; |  | ||||||
| 				 |  | ||||||
| 				logCookie(cookie); |  | ||||||
| 			} |  | ||||||
| 			 |  | ||||||
| 			return cookiesString; |  | ||||||
| 			 |  | ||||||
| 		} |  | ||||||
| 		*/ |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 	public void testSetFollowRedirects() { |  | ||||||
| 		// TODO - to implement this test we need a redirected server |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
|      |  | ||||||
| } |  | ||||||
| @ -1,85 +0,0 @@ | |||||||
| /* ownCloud Android Library is available under MIT license |  | ||||||
|  *   Copyright (C) 2016 ownCloud GmbH. |  | ||||||
|  *    |  | ||||||
|  *   Permission is hereby granted, free of charge, to any person obtaining a copy |  | ||||||
|  *   of this software and associated documentation files (the "Software"), to deal |  | ||||||
|  *   in the Software without restriction, including without limitation the rights |  | ||||||
|  *   to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |  | ||||||
|  *   copies of the Software, and to permit persons to whom the Software is |  | ||||||
|  *   furnished to do so, subject to the following conditions: |  | ||||||
|  *    |  | ||||||
|  *   The above copyright notice and this permission notice shall be included in |  | ||||||
|  *   all copies or substantial portions of the Software. |  | ||||||
|  *    |  | ||||||
|  *   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,  |  | ||||||
|  *   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |  | ||||||
|  *   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND  |  | ||||||
|  *   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS  |  | ||||||
|  *   BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN  |  | ||||||
|  *   ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN  |  | ||||||
|  *   CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |  | ||||||
|  *   THE SOFTWARE. |  | ||||||
|  * |  | ||||||
|  */ |  | ||||||
| package com.owncloud.android.lib.test_project.test; |  | ||||||
| 
 |  | ||||||
| import java.io.File; |  | ||||||
| 
 |  | ||||||
| import com.owncloud.android.lib.common.operations.RemoteOperationResult; |  | ||||||
| import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode; |  | ||||||
| import com.owncloud.android.lib.test_project.TestActivity; |  | ||||||
| 
 |  | ||||||
| /** |  | ||||||
|  * Class to test Read File Operation |  | ||||||
|  * @author masensio |  | ||||||
|  * @author David A. Velasco |  | ||||||
|  */ |  | ||||||
| 
 |  | ||||||
| public class ReadFileTest extends RemoteTest { |  | ||||||
| 	 |  | ||||||
| 	private static final String LOG_TAG = ReadFileTest.class.getCanonicalName(); |  | ||||||
| 	 |  | ||||||
| 	private TestActivity mActivity; |  | ||||||
| 	 |  | ||||||
| 	private String FILE_PATH = "/fileToRead.txt"; |  | ||||||
| 	private String mFullPath2File; |  | ||||||
| 	 |  | ||||||
| 	@Override |  | ||||||
| 	protected void setUp() throws Exception { |  | ||||||
| 		super.setUp(); |  | ||||||
| 
 |  | ||||||
| 		setActivityInitialTouchMode(false); |  | ||||||
| 		mActivity = getActivity(); |  | ||||||
| 		mFullPath2File = mBaseFolderPath + FILE_PATH; |  | ||||||
| 		 |  | ||||||
| 		File textFile = mActivity.extractAsset(TestActivity.ASSETS__TEXT_FILE_NAME); |  | ||||||
| 		RemoteOperationResult uploadResult = mActivity.uploadFile( |  | ||||||
| 				textFile.getAbsolutePath(),  |  | ||||||
| 				mFullPath2File,  |  | ||||||
| 				"txt/plain"); |  | ||||||
| 		if (!uploadResult.isSuccess()) { |  | ||||||
| 			Utils.logAndThrow(LOG_TAG, uploadResult); |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 	/** |  | ||||||
| 	 * Test Read File |  | ||||||
| 	 */ |  | ||||||
| 	public void testReadFile() { |  | ||||||
| 		RemoteOperationResult result = mActivity.readFile(mFullPath2File); |  | ||||||
| 		assertTrue(result.getData() != null && result.getData().size() ==  1); |  | ||||||
| 		assertTrue(result.isSuccess()); |  | ||||||
| 		// TODO check more properties of the result |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 	@Override |  | ||||||
| 	protected void tearDown() throws Exception { |  | ||||||
| 		RemoteOperationResult removeResult = mActivity.removeFile(mFullPath2File); |  | ||||||
| 		if (!removeResult.isSuccess() && removeResult.getCode() != ResultCode.TIMEOUT) { |  | ||||||
| 			Utils.logAndThrow(LOG_TAG, removeResult); |  | ||||||
| 		} |  | ||||||
| 		 |  | ||||||
| 		super.tearDown(); |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| } |  | ||||||
| @ -1,101 +0,0 @@ | |||||||
| /* ownCloud Android Library is available under MIT license |  | ||||||
|  *   Copyright (C) 2016 ownCloud GmbH. |  | ||||||
|  *    |  | ||||||
|  *   Permission is hereby granted, free of charge, to any person obtaining a copy |  | ||||||
|  *   of this software and associated documentation files (the "Software"), to deal |  | ||||||
|  *   in the Software without restriction, including without limitation the rights |  | ||||||
|  *   to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |  | ||||||
|  *   copies of the Software, and to permit persons to whom the Software is |  | ||||||
|  *   furnished to do so, subject to the following conditions: |  | ||||||
|  *    |  | ||||||
|  *   The above copyright notice and this permission notice shall be included in |  | ||||||
|  *   all copies or substantial portions of the Software. |  | ||||||
|  *    |  | ||||||
|  *   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,  |  | ||||||
|  *   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |  | ||||||
|  *   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND  |  | ||||||
|  *   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS  |  | ||||||
|  *   BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN  |  | ||||||
|  *   ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN  |  | ||||||
|  *   CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |  | ||||||
|  *   THE SOFTWARE. |  | ||||||
|  * |  | ||||||
|  */ |  | ||||||
| 
 |  | ||||||
| package com.owncloud.android.lib.test_project.test; |  | ||||||
| 
 |  | ||||||
| import java.io.File; |  | ||||||
| 
 |  | ||||||
| import com.owncloud.android.lib.common.operations.RemoteOperationResult; |  | ||||||
| import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode; |  | ||||||
| import com.owncloud.android.lib.test_project.TestActivity; |  | ||||||
| 
 |  | ||||||
| /** |  | ||||||
|  * Class to test Read Folder Operation |  | ||||||
|  * @author masensio |  | ||||||
|  * @author David A. Velasco |  | ||||||
|  */ |  | ||||||
| 
 |  | ||||||
| public class ReadFolderTest extends	RemoteTest { |  | ||||||
| 	 |  | ||||||
| 	private static final String LOG_TAG = ReadFolderTest.class.getCanonicalName(); |  | ||||||
| 
 |  | ||||||
| 	private static final String FOLDER_PATH = "/folderToRead"; |  | ||||||
| 	private static final String [] FILE_PATHS = { |  | ||||||
| 			FOLDER_PATH + "/file1.txt", |  | ||||||
| 			FOLDER_PATH + "/file2.txt", |  | ||||||
| 			FOLDER_PATH + "/file3.txt", |  | ||||||
| 	}; |  | ||||||
| 
 |  | ||||||
| 	 |  | ||||||
| 	private TestActivity mActivity; |  | ||||||
| 	private String mFullPathToFolder; |  | ||||||
| 	 |  | ||||||
| 	@Override |  | ||||||
| 	protected void setUp() throws Exception { |  | ||||||
| 		super.setUp(); |  | ||||||
| 		setActivityInitialTouchMode(false); |  | ||||||
| 		mActivity = getActivity(); |  | ||||||
| 		mFullPathToFolder = mBaseFolderPath + FOLDER_PATH; |  | ||||||
| 		 |  | ||||||
| 		File textFile = mActivity.extractAsset(TestActivity.ASSETS__TEXT_FILE_NAME); |  | ||||||
| 		RemoteOperationResult result = mActivity.createFolder( mFullPathToFolder, true); |  | ||||||
| 		if (result.isSuccess()) { |  | ||||||
| 			for (int i=0; i<FILE_PATHS.length && result.isSuccess(); i++) { |  | ||||||
| 				result = mActivity.uploadFile( |  | ||||||
| 						textFile.getAbsolutePath(),  |  | ||||||
| 						 mBaseFolderPath + FILE_PATHS[i],  |  | ||||||
| 						"txt/plain"); |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 				 |  | ||||||
| 		if (!result.isSuccess()) { |  | ||||||
| 			Utils.logAndThrow(LOG_TAG, result); |  | ||||||
| 		} |  | ||||||
| 	     |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	/** |  | ||||||
| 	 * Test Read Folder |  | ||||||
| 	 */ |  | ||||||
| 	public void testReadFolder() { |  | ||||||
| 
 |  | ||||||
| 		RemoteOperationResult result = mActivity.readFile(mFullPathToFolder); |  | ||||||
| 		assertTrue(result.isSuccess()); |  | ||||||
| 		assertTrue(result.getData() != null && result.getData().size() > 1); |  | ||||||
| 		assertTrue(result.getData().size() == 4); |  | ||||||
| 		// TODO assert more properties about the result |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	 |  | ||||||
| 	@Override |  | ||||||
| 	protected void tearDown() throws Exception { |  | ||||||
| 		RemoteOperationResult removeResult = mActivity.removeFile(mFullPathToFolder); |  | ||||||
| 		if (!removeResult.isSuccess() && removeResult.getCode() != ResultCode.TIMEOUT) { |  | ||||||
| 			Utils.logAndThrow(LOG_TAG, removeResult); |  | ||||||
| 		} |  | ||||||
| 		 |  | ||||||
| 		super.tearDown(); |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| } |  | ||||||
| @ -1,69 +0,0 @@ | |||||||
| /* ownCloud Android Library is available under MIT license |  | ||||||
|  *   Copyright (C) 2016 ownCloud GmbH. |  | ||||||
|  *    |  | ||||||
|  *   Permission is hereby granted, free of charge, to any person obtaining a copy |  | ||||||
|  *   of this software and associated documentation files (the "Software"), to deal |  | ||||||
|  *   in the Software without restriction, including without limitation the rights |  | ||||||
|  *   to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |  | ||||||
|  *   copies of the Software, and to permit persons to whom the Software is |  | ||||||
|  *   furnished to do so, subject to the following conditions: |  | ||||||
|  *    |  | ||||||
|  *   The above copyright notice and this permission notice shall be included in |  | ||||||
|  *   all copies or substantial portions of the Software. |  | ||||||
|  *    |  | ||||||
|  *   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,  |  | ||||||
|  *   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |  | ||||||
|  *   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND  |  | ||||||
|  *   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS  |  | ||||||
|  *   BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN  |  | ||||||
|  *   ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN  |  | ||||||
|  *   CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |  | ||||||
|  *   THE SOFTWARE. |  | ||||||
|  * |  | ||||||
|  */ |  | ||||||
| package com.owncloud.android.lib.test_project.test; |  | ||||||
| 
 |  | ||||||
| import com.owncloud.android.lib.common.operations.RemoteOperationResult; |  | ||||||
| import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode; |  | ||||||
| import com.owncloud.android.lib.test_project.TestActivity; |  | ||||||
| 
 |  | ||||||
| import android.test.ActivityInstrumentationTestCase2; |  | ||||||
| 
 |  | ||||||
| /** |  | ||||||
|  * Class to test Create Folder Operation |  | ||||||
|  * @author David A. Velasco |  | ||||||
|  * |  | ||||||
|  */ |  | ||||||
| public class RemoteTest extends ActivityInstrumentationTestCase2<TestActivity> { |  | ||||||
| 
 |  | ||||||
| 	private static final String LOG_TAG = RemoteTest.class.getSimpleName(); |  | ||||||
| 	 |  | ||||||
| 	protected String mBaseFolderPath = "/test_for_build_"; |  | ||||||
| 	 |  | ||||||
| 	public RemoteTest() { |  | ||||||
| 	    super(TestActivity.class); |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 	@Override |  | ||||||
| 	  protected void setUp() throws Exception { |  | ||||||
| 	    super.setUp(); |  | ||||||
| 	    setActivityInitialTouchMode(false); |  | ||||||
| 	    mBaseFolderPath += Utils.getBuildNumber(getActivity()); |  | ||||||
| 	     |  | ||||||
| 		RemoteOperationResult result = getActivity().createFolder(mBaseFolderPath, true); |  | ||||||
| 		if (!result.isSuccess()  && result.getCode() != ResultCode.TIMEOUT) { |  | ||||||
| 			Utils.logAndThrow(LOG_TAG, result); |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 	 |  | ||||||
| 	@Override |  | ||||||
| 	protected void tearDown() throws Exception { |  | ||||||
| 		RemoteOperationResult removeResult = getActivity().removeFile(mBaseFolderPath); |  | ||||||
| 		if (!removeResult.isSuccess() && removeResult.getCode() != ResultCode.TIMEOUT) { |  | ||||||
| 			Utils.logAndThrow(LOG_TAG, removeResult); |  | ||||||
| 		} |  | ||||||
| 		super.tearDown(); |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| } |  | ||||||
| @ -1,91 +0,0 @@ | |||||||
| /* ownCloud Android Library is available under MIT license |  | ||||||
|  *   Copyright (C) 2016 ownCloud GmbH. |  | ||||||
|  *    |  | ||||||
|  *   Permission is hereby granted, free of charge, to any person obtaining a copy |  | ||||||
|  *   of this software and associated documentation files (the "Software"), to deal |  | ||||||
|  *   in the Software without restriction, including without limitation the rights |  | ||||||
|  *   to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |  | ||||||
|  *   copies of the Software, and to permit persons to whom the Software is |  | ||||||
|  *   furnished to do so, subject to the following conditions: |  | ||||||
|  *    |  | ||||||
|  *   The above copyright notice and this permission notice shall be included in |  | ||||||
|  *   all copies or substantial portions of the Software. |  | ||||||
|  *    |  | ||||||
|  *   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,  |  | ||||||
|  *   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |  | ||||||
|  *   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND  |  | ||||||
|  *   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS  |  | ||||||
|  *   BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN  |  | ||||||
|  *   ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN  |  | ||||||
|  *   CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |  | ||||||
|  *   THE SOFTWARE. |  | ||||||
|  * |  | ||||||
|  */ |  | ||||||
| 
 |  | ||||||
| package com.owncloud.android.lib.test_project.test; |  | ||||||
| 
 |  | ||||||
| import java.io.File; |  | ||||||
| 
 |  | ||||||
| import com.owncloud.android.lib.resources.shares.OCShare; |  | ||||||
| import com.owncloud.android.lib.resources.shares.ShareType; |  | ||||||
| import com.owncloud.android.lib.common.operations.RemoteOperationResult; |  | ||||||
| import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode; |  | ||||||
| import com.owncloud.android.lib.test_project.TestActivity; |  | ||||||
| 
 |  | ||||||
| public class RemoveShareTest extends RemoteTest { |  | ||||||
| 	 |  | ||||||
| 	private static final String LOG_TAG = RemoveShareTest.class.getCanonicalName(); |  | ||||||
| 	 |  | ||||||
| 	private static final String FILE_TO_UNSHARE = "/fileToUnshare.txt"; |  | ||||||
| 
 |  | ||||||
| 	private TestActivity mActivity; |  | ||||||
| 	 |  | ||||||
| 	private String mFullPath2FileToUnshare; |  | ||||||
| 
 |  | ||||||
| 	private long mShareId; |  | ||||||
| 
 |  | ||||||
| 	@Override |  | ||||||
| 	  protected void setUp() throws Exception { |  | ||||||
| 	    super.setUp(); |  | ||||||
| 	    setActivityInitialTouchMode(false); |  | ||||||
| 	    mActivity = getActivity(); |  | ||||||
| 	    mFullPath2FileToUnshare = mBaseFolderPath + FILE_TO_UNSHARE; |  | ||||||
| 	     |  | ||||||
| 		File textFile = mActivity.extractAsset(TestActivity.ASSETS__TEXT_FILE_NAME); |  | ||||||
| 		RemoteOperationResult result = mActivity.uploadFile( |  | ||||||
| 				textFile.getAbsolutePath(),  |  | ||||||
| 				mFullPath2FileToUnshare,  |  | ||||||
| 				"txt/plain"); |  | ||||||
| 		if (!result.isSuccess()) { |  | ||||||
| 			Utils.logAndThrow(LOG_TAG, result); |  | ||||||
| 		} |  | ||||||
| 		 |  | ||||||
| 		result = mActivity.createShare(mFullPath2FileToUnshare, ShareType.PUBLIC_LINK, "", false, "", 1); |  | ||||||
| 		if (!result.isSuccess()) { |  | ||||||
| 			Utils.logAndThrow(LOG_TAG, result); |  | ||||||
| 		} else { |  | ||||||
| 			OCShare created = (OCShare) result.getData().get(0); |  | ||||||
| 			mShareId = created.getRemoteId(); |  | ||||||
| 		} |  | ||||||
| 		 |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 	/** |  | ||||||
| 	 * Test Remove Share: the server must support SHARE API |  | ||||||
| 	 */ |  | ||||||
| 	public void testRemoveShare() { |  | ||||||
| 		RemoteOperationResult result = mActivity.removeShare((int) mShareId); |  | ||||||
| 		assertTrue(result.isSuccess()); |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 	 |  | ||||||
| 	@Override |  | ||||||
| 	protected void tearDown() throws Exception { |  | ||||||
| 		RemoteOperationResult removeResult = mActivity.removeFile(mFullPath2FileToUnshare); |  | ||||||
| 		if (!removeResult.isSuccess() && removeResult.getCode() != ResultCode.TIMEOUT) { |  | ||||||
| 			Utils.logAndThrow(LOG_TAG, removeResult); |  | ||||||
| 		} |  | ||||||
| 		super.tearDown(); |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| } |  | ||||||
| @ -1,232 +0,0 @@ | |||||||
| /* ownCloud Android Library is available under MIT license |  | ||||||
|  *   Copyright (C) 2016 ownCloud GmbH. |  | ||||||
|  *    |  | ||||||
|  *   Permission is hereby granted, free of charge, to any person obtaining a copy |  | ||||||
|  *   of this software and associated documentation files (the "Software"), to deal |  | ||||||
|  *   in the Software without restriction, including without limitation the rights |  | ||||||
|  *   to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |  | ||||||
|  *   copies of the Software, and to permit persons to whom the Software is |  | ||||||
|  *   furnished to do so, subject to the following conditions: |  | ||||||
|  *    |  | ||||||
|  *   The above copyright notice and this permission notice shall be included in |  | ||||||
|  *   all copies or substantial portions of the Software. |  | ||||||
|  *    |  | ||||||
|  *   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,  |  | ||||||
|  *   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |  | ||||||
|  *   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND  |  | ||||||
|  *   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS  |  | ||||||
|  *   BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN  |  | ||||||
|  *   ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN  |  | ||||||
|  *   CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |  | ||||||
|  *   THE SOFTWARE. |  | ||||||
|  * |  | ||||||
|  */ |  | ||||||
| 
 |  | ||||||
| package com.owncloud.android.lib.test_project.test; |  | ||||||
| 
 |  | ||||||
| import java.io.File; |  | ||||||
| 
 |  | ||||||
| import com.owncloud.android.lib.common.operations.RemoteOperationResult; |  | ||||||
| import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode; |  | ||||||
| import com.owncloud.android.lib.resources.files.FileUtils; |  | ||||||
| import com.owncloud.android.lib.test_project.TestActivity; |  | ||||||
| 
 |  | ||||||
| /** |  | ||||||
|  * Class to test Rename File Operation |  | ||||||
|  * @author masensio |  | ||||||
|  * |  | ||||||
|  */ |  | ||||||
| 
 |  | ||||||
| public class RenameFileTest extends RemoteTest { |  | ||||||
| 
 |  | ||||||
| 	private static final String LOG_TAG = RenameFileTest.class.getCanonicalName(); |  | ||||||
| 	 |  | ||||||
| 	/* Folder data to rename. This folder must exist on the account */ |  | ||||||
| 	private static final String OLD_FOLDER_NAME = "folderToRename"; |  | ||||||
| 	private static final String OLD_FOLDER_PATH = FileUtils.PATH_SEPARATOR + OLD_FOLDER_NAME; |  | ||||||
| 	private static final String NEW_FOLDER_NAME = "renamedFolder"; |  | ||||||
| 	private static final String NEW_FOLDER_PATH = FileUtils.PATH_SEPARATOR + NEW_FOLDER_NAME; |  | ||||||
| 
 |  | ||||||
| 	/* File data to rename. This file must exist on the account */ |  | ||||||
| 	private static final String OLD_FILE_NAME = "fileToRename.png"; |  | ||||||
| 	private static final String OLD_FILE_PATH = FileUtils.PATH_SEPARATOR + OLD_FILE_NAME; |  | ||||||
| 	private static final String NEW_FILE_NAME = "renamedFile.png"; |  | ||||||
| 	private static final String NEW_FILE_PATH = FileUtils.PATH_SEPARATOR + NEW_FILE_NAME; |  | ||||||
| 	 |  | ||||||
| 	 |  | ||||||
| 	private String mToCleanUpInServer; |  | ||||||
| 	private TestActivity mActivity; |  | ||||||
| 	private String mFullPath2OldFolder; |  | ||||||
| 	private String mFullPath2NewFolder; |  | ||||||
| 	private String mFullPath2OldFile; |  | ||||||
| 	private String mFullPath2NewFile; |  | ||||||
| 	 |  | ||||||
| 	@Override |  | ||||||
| 	  protected void setUp() throws Exception { |  | ||||||
| 	    super.setUp(); |  | ||||||
| 	    setActivityInitialTouchMode(false); |  | ||||||
| 	    mActivity = getActivity(); |  | ||||||
|     	mFullPath2OldFolder = mBaseFolderPath + OLD_FOLDER_PATH; |  | ||||||
|     	mFullPath2NewFolder = mBaseFolderPath + NEW_FOLDER_PATH; |  | ||||||
|     	mFullPath2OldFile = mBaseFolderPath + OLD_FILE_PATH; |  | ||||||
|     	mFullPath2NewFile = mBaseFolderPath + NEW_FILE_PATH; |  | ||||||
| 	     |  | ||||||
| 		RemoteOperationResult result = mActivity.createFolder(mFullPath2OldFolder, true); |  | ||||||
| 		if (!result.isSuccess() && result.getCode() != ResultCode.TIMEOUT) { |  | ||||||
| 			Utils.logAndThrow(LOG_TAG, result); |  | ||||||
| 		} |  | ||||||
| 		 |  | ||||||
| 		File imageFile = mActivity.extractAsset(TestActivity.ASSETS__IMAGE_FILE_NAME); |  | ||||||
| 		result = mActivity.uploadFile( |  | ||||||
| 				imageFile.getAbsolutePath(),  |  | ||||||
| 				mFullPath2OldFile,  |  | ||||||
| 				"image/png"); |  | ||||||
| 		if (!result.isSuccess()) { |  | ||||||
| 			Utils.logAndThrow(LOG_TAG, result); |  | ||||||
| 		} |  | ||||||
| 	     |  | ||||||
| 		mToCleanUpInServer = null; |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 	/** |  | ||||||
| 	 * Test Rename Folder |  | ||||||
| 	 */ |  | ||||||
| 	public void testRenameFolder() { |  | ||||||
| 
 |  | ||||||
| 		mToCleanUpInServer = mFullPath2OldFolder; |  | ||||||
| 		RemoteOperationResult result = mActivity.renameFile( |  | ||||||
| 				OLD_FOLDER_NAME,  |  | ||||||
| 				mFullPath2OldFolder,  |  | ||||||
| 				NEW_FOLDER_NAME, |  | ||||||
| 				true); |  | ||||||
| 		assertTrue(result.isSuccess()); |  | ||||||
| 		mToCleanUpInServer = mFullPath2NewFolder; |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 	/** |  | ||||||
| 	 * Test Rename Folder with forbidden characters : \  < >  :  "  |  ?  * |  | ||||||
| 	 */ |  | ||||||
| 	public void testRenameFolderForbiddenChars() { |  | ||||||
| 		 |  | ||||||
| 		RemoteOperationResult result = mActivity.renameFile(OLD_FOLDER_NAME, mFullPath2OldFolder,  |  | ||||||
| 				NEW_FOLDER_NAME + "\\", true); |  | ||||||
| 		assertTrue(result.getCode() == ResultCode.INVALID_CHARACTER_IN_NAME); |  | ||||||
| 		 |  | ||||||
| 		result = mActivity.renameFile(OLD_FOLDER_NAME, mFullPath2OldFolder,  |  | ||||||
| 				NEW_FOLDER_NAME + "<", true); |  | ||||||
| 		assertTrue(result.getCode() == ResultCode.INVALID_CHARACTER_IN_NAME); |  | ||||||
| 		 |  | ||||||
| 		result = mActivity.renameFile(OLD_FOLDER_NAME, mFullPath2OldFolder,  |  | ||||||
| 				NEW_FOLDER_NAME + ">", true); |  | ||||||
| 		assertTrue(result.getCode() == ResultCode.INVALID_CHARACTER_IN_NAME); |  | ||||||
| 		 |  | ||||||
| 		result = mActivity.renameFile(OLD_FOLDER_NAME, mFullPath2OldFolder,  |  | ||||||
| 				NEW_FOLDER_NAME + ":", true); |  | ||||||
| 		assertTrue(result.getCode() == ResultCode.INVALID_CHARACTER_IN_NAME); |  | ||||||
| 		 |  | ||||||
| 		result = mActivity.renameFile(OLD_FOLDER_NAME, mFullPath2OldFolder,  |  | ||||||
| 				NEW_FOLDER_NAME + "\"", true); |  | ||||||
| 		assertTrue(result.getCode() == ResultCode.INVALID_CHARACTER_IN_NAME); |  | ||||||
| 		 |  | ||||||
| 		result = mActivity.renameFile(OLD_FOLDER_NAME, mFullPath2OldFolder,  |  | ||||||
| 				NEW_FOLDER_NAME + "|", true); |  | ||||||
| 		assertTrue(result.getCode() == ResultCode.INVALID_CHARACTER_IN_NAME); |  | ||||||
| 		 |  | ||||||
| 		result = mActivity.renameFile(OLD_FOLDER_NAME, mFullPath2OldFolder,  |  | ||||||
| 				NEW_FOLDER_NAME + "?", true); |  | ||||||
| 		assertTrue(result.getCode() == ResultCode.INVALID_CHARACTER_IN_NAME); |  | ||||||
| 		 |  | ||||||
| 		result = mActivity.renameFile(OLD_FOLDER_NAME, mFullPath2OldFolder,  |  | ||||||
| 				NEW_FOLDER_NAME + "*", true); |  | ||||||
| 		assertTrue(result.getCode() == ResultCode.INVALID_CHARACTER_IN_NAME); |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 	/** |  | ||||||
| 	 * Test Rename File |  | ||||||
| 	 */ |  | ||||||
| 	public void testRenameFile() { |  | ||||||
| 		mToCleanUpInServer = mFullPath2OldFile; |  | ||||||
| 		RemoteOperationResult result = mActivity.renameFile( |  | ||||||
| 				OLD_FILE_NAME,  |  | ||||||
| 				mFullPath2OldFile,  |  | ||||||
| 				NEW_FILE_NAME,  |  | ||||||
| 				false); |  | ||||||
| 		assertTrue(result.isSuccess()); |  | ||||||
| 		mToCleanUpInServer = mFullPath2NewFile; |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 	 |  | ||||||
| 	/** |  | ||||||
| 	 * Test Rename Folder with forbidden characters: \  < >  :  "  |  ?  * |  | ||||||
| 	 */ |  | ||||||
| 	public void testRenameFileForbiddenChars() {		 |  | ||||||
| 		RemoteOperationResult result = mActivity.renameFile( |  | ||||||
| 				OLD_FILE_NAME,  |  | ||||||
| 				mFullPath2OldFile,  |  | ||||||
| 				"\\" + NEW_FILE_NAME, |  | ||||||
| 				false); |  | ||||||
| 		assertTrue(result.getCode() == ResultCode.INVALID_CHARACTER_IN_NAME); |  | ||||||
| 		 |  | ||||||
| 		result = mActivity.renameFile( |  | ||||||
| 				OLD_FILE_NAME,  |  | ||||||
| 				mFullPath2OldFile,  |  | ||||||
| 				"<" + NEW_FILE_NAME,  |  | ||||||
| 				false); |  | ||||||
| 		assertTrue(result.getCode() == ResultCode.INVALID_CHARACTER_IN_NAME); |  | ||||||
| 		 |  | ||||||
| 		result = mActivity.renameFile( |  | ||||||
| 				OLD_FILE_NAME,  |  | ||||||
| 				mFullPath2OldFile,  |  | ||||||
| 				">" + NEW_FILE_NAME, |  | ||||||
| 				false); |  | ||||||
| 		assertTrue(result.getCode() == ResultCode.INVALID_CHARACTER_IN_NAME); |  | ||||||
| 		 |  | ||||||
| 		result = mActivity.renameFile( |  | ||||||
| 				OLD_FILE_NAME,  |  | ||||||
| 				mFullPath2OldFile,  |  | ||||||
| 				":" + NEW_FILE_NAME, |  | ||||||
| 				false); |  | ||||||
| 		assertTrue(result.getCode() == ResultCode.INVALID_CHARACTER_IN_NAME); |  | ||||||
| 		 |  | ||||||
| 		result = mActivity.renameFile( |  | ||||||
| 				OLD_FILE_NAME, |  | ||||||
| 				mFullPath2OldFile,  |  | ||||||
| 				"\"" + NEW_FILE_NAME, |  | ||||||
| 				false); |  | ||||||
| 		assertTrue(result.getCode() == ResultCode.INVALID_CHARACTER_IN_NAME); |  | ||||||
| 		 |  | ||||||
| 		result = mActivity.renameFile( |  | ||||||
| 				OLD_FILE_NAME, |  | ||||||
| 				mFullPath2OldFile,  |  | ||||||
| 				"|" + NEW_FILE_NAME, |  | ||||||
| 				false); |  | ||||||
| 		assertTrue(result.getCode() == ResultCode.INVALID_CHARACTER_IN_NAME); |  | ||||||
| 		 |  | ||||||
| 		result = mActivity.renameFile( |  | ||||||
| 				OLD_FILE_NAME, |  | ||||||
| 				mFullPath2OldFile,  |  | ||||||
| 				"?" + NEW_FILE_NAME, |  | ||||||
| 				false); |  | ||||||
| 		assertTrue(result.getCode() == ResultCode.INVALID_CHARACTER_IN_NAME); |  | ||||||
| 		 |  | ||||||
| 		result = mActivity.renameFile( |  | ||||||
| 				OLD_FILE_NAME, |  | ||||||
| 				mFullPath2OldFile,  |  | ||||||
| 				"*" + NEW_FILE_NAME, false); |  | ||||||
| 		assertTrue(result.getCode() == ResultCode.INVALID_CHARACTER_IN_NAME); |  | ||||||
| 		 |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 	 |  | ||||||
| 	@Override |  | ||||||
| 	protected void tearDown() throws Exception { |  | ||||||
| 		if (mToCleanUpInServer != null) { |  | ||||||
| 			RemoteOperationResult removeResult = mActivity.removeFile(mToCleanUpInServer); |  | ||||||
| 			if (!removeResult.isSuccess()) { |  | ||||||
| 				Utils.logAndThrow(LOG_TAG, removeResult); |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 		super.tearDown(); |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| } |  | ||||||
| @ -1,132 +0,0 @@ | |||||||
| /* ownCloud Android Library is available under MIT license |  | ||||||
|  *   Copyright (C) 2016 ownCloud GmbH. |  | ||||||
|  *    |  | ||||||
|  *   Permission is hereby granted, free of charge, to any person obtaining a copy |  | ||||||
|  *   of this software and associated documentation files (the "Software"), to deal |  | ||||||
|  *   in the Software without restriction, including without limitation the rights |  | ||||||
|  *   to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |  | ||||||
|  *   copies of the Software, and to permit persons to whom the Software is |  | ||||||
|  *   furnished to do so, subject to the following conditions: |  | ||||||
|  *    |  | ||||||
|  *   The above copyright notice and this permission notice shall be included in |  | ||||||
|  *   all copies or substantial portions of the Software. |  | ||||||
|  *    |  | ||||||
|  *   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,  |  | ||||||
|  *   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |  | ||||||
|  *   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND  |  | ||||||
|  *   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS  |  | ||||||
|  *   BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN  |  | ||||||
|  *   ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN  |  | ||||||
|  *   CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |  | ||||||
|  *   THE SOFTWARE. |  | ||||||
|  * |  | ||||||
|  */ |  | ||||||
| package com.owncloud.android.lib.test_project.test; |  | ||||||
| 
 |  | ||||||
| import java.security.GeneralSecurityException; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| import android.net.Uri; |  | ||||||
| import android.test.AndroidTestCase; |  | ||||||
| 
 |  | ||||||
| import com.owncloud.android.lib.common.OwnCloudAccount; |  | ||||||
| import com.owncloud.android.lib.common.OwnCloudClient; |  | ||||||
| import com.owncloud.android.lib.common.SimpleFactoryManager; |  | ||||||
| import com.owncloud.android.lib.common.authentication.OwnCloudCredentialsFactory; |  | ||||||
| import com.owncloud.android.lib.test_project.R; |  | ||||||
| import com.owncloud.android.lib.test_project.SelfSignedConfidentSslSocketFactory; |  | ||||||
| 
 |  | ||||||
| import junit.framework.AssertionFailedError; |  | ||||||
| 
 |  | ||||||
| /** |  | ||||||
|  * Unit test for SimpleFactoryManager  |  | ||||||
|  *  |  | ||||||
|  * @author David A. Velasco |  | ||||||
|  */ |  | ||||||
| 
 |  | ||||||
| public class SimpleFactoryManagerTest extends AndroidTestCase { |  | ||||||
| 
 |  | ||||||
| 	private SimpleFactoryManager mSFMgr; |  | ||||||
| 	 |  | ||||||
| 	private Uri mServerUri; |  | ||||||
| 	private String mUsername; |  | ||||||
| 	private OwnCloudAccount mValidAccount; |  | ||||||
| 	private OwnCloudAccount mAnonymousAccount; |  | ||||||
| 	 |  | ||||||
| 	public SimpleFactoryManagerTest() { |  | ||||||
| 		super(); |  | ||||||
| 		 |  | ||||||
| 		Protocol pr = Protocol.getProtocol("https"); |  | ||||||
| 		if (pr == null || !(pr.getSocketFactory() instanceof SelfSignedConfidentSslSocketFactory)) { |  | ||||||
| 			try { |  | ||||||
| 				ProtocolSocketFactory psf = new SelfSignedConfidentSslSocketFactory(); |  | ||||||
| 				Protocol.registerProtocol( |  | ||||||
| 						"https", |  | ||||||
| 						new Protocol("https", psf, 443)); |  | ||||||
| 				 |  | ||||||
| 			} catch (GeneralSecurityException e) { |  | ||||||
| 				throw new AssertionFailedError( |  | ||||||
| 						"Self-signed confident SSL context could not be loaded"); |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 	 |  | ||||||
| 	@Override |  | ||||||
| 	protected void setUp() throws Exception { |  | ||||||
| 		super.setUp(); |  | ||||||
| 		mSFMgr = new SimpleFactoryManager(); |  | ||||||
| 		mServerUri = Uri.parse(getContext().getString(R.string.server_base_url)); |  | ||||||
| 		mUsername = getContext().getString(R.string.username); |  | ||||||
| 		 |  | ||||||
| 		mValidAccount = new OwnCloudAccount( |  | ||||||
| 				mServerUri, OwnCloudCredentialsFactory.newBasicCredentials( |  | ||||||
| 						mUsername,  |  | ||||||
| 						getContext().getString(R.string.password) |  | ||||||
| 				) |  | ||||||
| 		); |  | ||||||
| 		 |  | ||||||
| 		mAnonymousAccount = new OwnCloudAccount( |  | ||||||
| 				mServerUri, OwnCloudCredentialsFactory.getAnonymousCredentials()); |  | ||||||
| 				 |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 	public void testGetClientFor() { |  | ||||||
| 		try { |  | ||||||
| 			OwnCloudClient client = mSFMgr.getClientFor(mValidAccount, getContext()); |  | ||||||
| 		 |  | ||||||
| 			assertNotSame("Got same client instances for same account", |  | ||||||
| 					client, mSFMgr.getClientFor(mValidAccount,  getContext())); |  | ||||||
| 		 |  | ||||||
| 			assertNotSame("Got same client instances for different accounts", |  | ||||||
| 					client, mSFMgr.getClientFor(mAnonymousAccount, getContext())); |  | ||||||
| 		 |  | ||||||
| 		} catch (Exception e) { |  | ||||||
| 			throw new AssertionFailedError("Exception getting client for account: " + e.getMessage()); |  | ||||||
| 		} |  | ||||||
| 		// TODO harder tests |  | ||||||
| 	} |  | ||||||
|      |  | ||||||
| 	public void testRemoveClientFor() { |  | ||||||
| 		try { |  | ||||||
| 			OwnCloudClient client = mSFMgr.getClientFor(mValidAccount, getContext()); |  | ||||||
| 			mSFMgr.removeClientFor(mValidAccount); |  | ||||||
| 			assertNotSame("Got same client instance after removing it from manager", |  | ||||||
| 					client, mSFMgr.getClientFor(mValidAccount,  getContext())); |  | ||||||
| 			 |  | ||||||
| 		} catch (Exception e) { |  | ||||||
| 			throw new AssertionFailedError("Exception getting client for account: " + e.getMessage()); |  | ||||||
| 		} |  | ||||||
| 		// TODO harder tests |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
|      |  | ||||||
| 	public void testSaveAllClients() { |  | ||||||
| 		// TODO implement test; |  | ||||||
| 		// 		or refactor saveAllClients() method out of OwnCloudClientManager to make  |  | ||||||
| 		//		it independent of AccountManager |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| } |  | ||||||
| @ -1,131 +0,0 @@ | |||||||
| /* ownCloud Android Library is available under MIT license |  | ||||||
|  *   Copyright (C) 2016 ownCloud GmbH. |  | ||||||
|  *    |  | ||||||
|  *   Permission is hereby granted, free of charge, to any person obtaining a copy |  | ||||||
|  *   of this software and associated documentation files (the "Software"), to deal |  | ||||||
|  *   in the Software without restriction, including without limitation the rights |  | ||||||
|  *   to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |  | ||||||
|  *   copies of the Software, and to permit persons to whom the Software is |  | ||||||
|  *   furnished to do so, subject to the following conditions: |  | ||||||
|  *    |  | ||||||
|  *   The above copyright notice and this permission notice shall be included in |  | ||||||
|  *   all copies or substantial portions of the Software. |  | ||||||
|  *    |  | ||||||
|  *   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,  |  | ||||||
|  *   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |  | ||||||
|  *   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND  |  | ||||||
|  *   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS  |  | ||||||
|  *   BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN  |  | ||||||
|  *   ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN  |  | ||||||
|  *   CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |  | ||||||
|  *   THE SOFTWARE. |  | ||||||
|  * |  | ||||||
|  */ |  | ||||||
| package com.owncloud.android.lib.test_project.test; |  | ||||||
| 
 |  | ||||||
| import java.security.GeneralSecurityException; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| import android.net.Uri; |  | ||||||
| import android.test.AndroidTestCase; |  | ||||||
| 
 |  | ||||||
| import com.owncloud.android.lib.common.OwnCloudAccount; |  | ||||||
| import com.owncloud.android.lib.common.OwnCloudClient; |  | ||||||
| import com.owncloud.android.lib.common.SingleSessionManager; |  | ||||||
| import com.owncloud.android.lib.common.authentication.OwnCloudCredentialsFactory; |  | ||||||
| import com.owncloud.android.lib.test_project.R; |  | ||||||
| 
 |  | ||||||
| import junit.framework.AssertionFailedError; |  | ||||||
| 
 |  | ||||||
| /** |  | ||||||
|  * Unit test for SingleSessionManager  |  | ||||||
|  *  |  | ||||||
|  * @author David A. Velasco |  | ||||||
|  */ |  | ||||||
| public class SingleSessionManagerTest extends AndroidTestCase { |  | ||||||
| 
 |  | ||||||
| 	private SingleSessionManager mSSMgr; |  | ||||||
| 	 |  | ||||||
| 	private Uri mServerUri; |  | ||||||
| 	private String mUsername; |  | ||||||
| 	private OwnCloudAccount mValidAccount; |  | ||||||
| 	private OwnCloudAccount mAnonymousAccount; |  | ||||||
| 	 |  | ||||||
| 	public SingleSessionManagerTest() { |  | ||||||
| 		super(); |  | ||||||
| 		 |  | ||||||
| 		Protocol pr = Protocol.getProtocol("https"); |  | ||||||
| 		if (pr == null || !(pr.getSocketFactory() instanceof SelfSignedConfidentSslSocketFactory)) { |  | ||||||
| 			try { |  | ||||||
| 				ProtocolSocketFactory psf = new SelfSignedConfidentSslSocketFactory(); |  | ||||||
| 				Protocol.registerProtocol( |  | ||||||
| 						"https", |  | ||||||
| 						new Protocol("https", psf, 443)); |  | ||||||
| 				 |  | ||||||
| 			} catch (GeneralSecurityException e) { |  | ||||||
| 				throw new AssertionFailedError( |  | ||||||
| 						"Self-signed confident SSL context could not be loaded"); |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 	 |  | ||||||
| 	@Override |  | ||||||
| 	protected void setUp() throws Exception { |  | ||||||
| 		super.setUp(); |  | ||||||
| 		mSSMgr = new SingleSessionManager(); |  | ||||||
| 		mServerUri = Uri.parse(getContext().getString(R.string.server_base_url)); |  | ||||||
| 		mUsername = getContext().getString(R.string.username); |  | ||||||
| 		 |  | ||||||
| 		mValidAccount = new OwnCloudAccount( |  | ||||||
| 				mServerUri, OwnCloudCredentialsFactory.newBasicCredentials( |  | ||||||
| 						mUsername,  |  | ||||||
| 						getContext().getString(R.string.password) |  | ||||||
| 				) |  | ||||||
| 		); |  | ||||||
| 		 |  | ||||||
| 		mAnonymousAccount = new OwnCloudAccount( |  | ||||||
| 				mServerUri, OwnCloudCredentialsFactory.getAnonymousCredentials()); |  | ||||||
| 				 |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 	public void testGetClientFor() { |  | ||||||
| 		try { |  | ||||||
| 			OwnCloudClient client1 = mSSMgr.getClientFor(mValidAccount, getContext()); |  | ||||||
| 			OwnCloudClient client2 = mSSMgr.getClientFor(mAnonymousAccount, getContext()); |  | ||||||
| 
 |  | ||||||
| 			assertNotSame("Got same client instances for different accounts", |  | ||||||
| 					client1, client2); |  | ||||||
| 			assertSame("Got different client instances for same account", |  | ||||||
| 					client1, mSSMgr.getClientFor(mValidAccount,  getContext())); |  | ||||||
| 
 |  | ||||||
| 		} catch (Exception e) { |  | ||||||
| 			throw new AssertionFailedError("Exception getting client for account: " + e.getMessage()); |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		// TODO harder tests |  | ||||||
| 	} |  | ||||||
|      |  | ||||||
| 	public void testRemoveClientFor() { |  | ||||||
| 		try { |  | ||||||
| 			OwnCloudClient client1 = mSSMgr.getClientFor(mValidAccount, getContext()); |  | ||||||
| 			mSSMgr.removeClientFor(mValidAccount); |  | ||||||
| 			assertNotSame("Got same client instance after removing it from manager", |  | ||||||
| 					client1, mSSMgr.getClientFor(mValidAccount,  getContext())); |  | ||||||
| 		} catch (Exception e) { |  | ||||||
| 			throw new AssertionFailedError("Exception getting client for account: " + e.getMessage()); |  | ||||||
| 		} |  | ||||||
| 		 |  | ||||||
| 		// TODO harder tests |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
|      |  | ||||||
| 	public void testSaveAllClients() { |  | ||||||
| 		// TODO implement test; |  | ||||||
| 		// 		or refactor saveAllClients() method out of OwnCloudClientManager to make  |  | ||||||
| 		//		it independent of AccountManager |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| } |  | ||||||
| @ -1,257 +0,0 @@ | |||||||
| /* ownCloud Android Library is available under MIT license |  | ||||||
|  *   @author masensio |  | ||||||
|  *   @author David A. Velasco |  | ||||||
|  *   Copyright (C) 2016 ownCloud GmbH. |  | ||||||
|  *    |  | ||||||
|  *   Permission is hereby granted, free of charge, to any person obtaining a copy |  | ||||||
|  *   of this software and associated documentation files (the "Software"), to deal |  | ||||||
|  *   in the Software without restriction, including without limitation the rights |  | ||||||
|  *   to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |  | ||||||
|  *   copies of the Software, and to permit persons to whom the Software is |  | ||||||
|  *   furnished to do so, subject to the following conditions: |  | ||||||
|  *    |  | ||||||
|  *   The above copyright notice and this permission notice shall be included in |  | ||||||
|  *   all copies or substantial portions of the Software. |  | ||||||
|  *    |  | ||||||
|  *   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,  |  | ||||||
|  *   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |  | ||||||
|  *   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND  |  | ||||||
|  *   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS  |  | ||||||
|  *   BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN  |  | ||||||
|  *   ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN  |  | ||||||
|  *   CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |  | ||||||
|  *   THE SOFTWARE. |  | ||||||
|  * |  | ||||||
|  */ |  | ||||||
| 
 |  | ||||||
| package com.owncloud.android.lib.test_project.test; |  | ||||||
| 
 |  | ||||||
| import java.io.File; |  | ||||||
| import java.security.GeneralSecurityException; |  | ||||||
| 
 |  | ||||||
| import junit.framework.AssertionFailedError; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| import android.content.Context; |  | ||||||
| import android.net.Uri; |  | ||||||
| import android.util.Log; |  | ||||||
| 
 |  | ||||||
| import com.owncloud.android.lib.common.OwnCloudClient; |  | ||||||
| import com.owncloud.android.lib.common.OwnCloudClientFactory; |  | ||||||
| import com.owncloud.android.lib.common.authentication.OwnCloudCredentialsFactory; |  | ||||||
| import com.owncloud.android.lib.common.network.NetworkUtils; |  | ||||||
| import com.owncloud.android.lib.common.operations.RemoteOperationResult; |  | ||||||
| import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode; |  | ||||||
| import com.owncloud.android.lib.resources.shares.OCShare; |  | ||||||
| import com.owncloud.android.lib.resources.shares.RemoveRemoteShareOperation; |  | ||||||
| import com.owncloud.android.lib.resources.shares.ShareType; |  | ||||||
| import com.owncloud.android.lib.resources.shares.UpdateRemoteShareOperation; |  | ||||||
| import com.owncloud.android.lib.test_project.R; |  | ||||||
| import com.owncloud.android.lib.test_project.TestActivity; |  | ||||||
| 
 |  | ||||||
| /** |  | ||||||
|  * Class to test UpdateRemoteShareOperation |  | ||||||
|  * with private shares |  | ||||||
|  * |  | ||||||
|  */ |  | ||||||
| public class UpdatePrivateShareTest extends RemoteTest { |  | ||||||
| 	private static final String LOG_TAG = UpdatePrivateShareTest.class.getCanonicalName(); |  | ||||||
| 	 |  | ||||||
| 	/* File to share and update */ |  | ||||||
| 	private static final String FILE_TO_SHARE = "/fileToShare.txt"; |  | ||||||
| 
 |  | ||||||
| 	/* Folder to share and update */ |  | ||||||
| 	private static final String FOLDER_TO_SHARE = "/folderToShare"; |  | ||||||
| 
 |  | ||||||
| 	/* Sharees */ |  | ||||||
| 	private static final String USER_SHAREE = "admin"; |  | ||||||
| 	private static final String GROUP_SHAREE = "admin"; |  | ||||||
| 
 |  | ||||||
| 	private String mFullPath2FileToShare; |  | ||||||
| 	private String mFullPath2FolderToShare; |  | ||||||
| 
 |  | ||||||
| 	private OCShare mFileShare; |  | ||||||
| 	private OCShare mFolderShare; |  | ||||||
| 
 |  | ||||||
| 	String mServerUri, mUser, mPass; |  | ||||||
| 	OwnCloudClient mClient = null; |  | ||||||
| 	 |  | ||||||
| 	public UpdatePrivateShareTest(){ |  | ||||||
| 		super(); |  | ||||||
| 		 |  | ||||||
| 		Protocol pr = Protocol.getProtocol("https"); |  | ||||||
| 		if (pr == null || !(pr.getSocketFactory() instanceof SelfSignedConfidentSslSocketFactory)) { |  | ||||||
| 			try { |  | ||||||
| 				ProtocolSocketFactory psf = new SelfSignedConfidentSslSocketFactory(); |  | ||||||
| 				Protocol.registerProtocol( |  | ||||||
| 						"https", |  | ||||||
| 						new Protocol("https", psf, 443)); |  | ||||||
| 				 |  | ||||||
| 			} catch (GeneralSecurityException e) { |  | ||||||
| 				throw new AssertionFailedError( |  | ||||||
| 						"Self-signed confident SSL context could not be loaded"); |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 	protected Context getContext() { |  | ||||||
| 		return getActivity(); |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	@Override |  | ||||||
| 	protected void setUp() throws Exception { |  | ||||||
| 	    super.setUp(); |  | ||||||
| 
 |  | ||||||
| 	    // Next initialization cannot be done in the constructor because getContext() is not  |  | ||||||
| 	    // ready yet, returns NULL. |  | ||||||
| 	    initAccessToServer(getContext()); |  | ||||||
| 	     |  | ||||||
| 	    Log.v(LOG_TAG, "Setting up the remote fixture..."); |  | ||||||
| 	     |  | ||||||
| 	    // Upload the file |  | ||||||
| 	    mFullPath2FileToShare = mBaseFolderPath + FILE_TO_SHARE; |  | ||||||
| 	     |  | ||||||
| 	    File textFile = getActivity().extractAsset(TestActivity.ASSETS__TEXT_FILE_NAME); |  | ||||||
| 		RemoteOperationResult result = getActivity().uploadFile( |  | ||||||
| 				textFile.getAbsolutePath(),  |  | ||||||
| 				mFullPath2FileToShare,  |  | ||||||
| 				"txt/plain"); |  | ||||||
| 		if (!result.isSuccess()) { |  | ||||||
| 			Utils.logAndThrow(LOG_TAG, result); |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		// Share the file privately with other user |  | ||||||
| 		result = getActivity().createShare( |  | ||||||
| 				mFullPath2FileToShare,  |  | ||||||
| 				ShareType.USER, |  | ||||||
| 				USER_SHAREE, |  | ||||||
| 				false,  |  | ||||||
| 				"",  |  | ||||||
| 				OCShare.MAXIMUM_PERMISSIONS_FOR_FILE); |  | ||||||
| 
 |  | ||||||
| 	    if (result.isSuccess()){ |  | ||||||
| 	    	mFileShare = (OCShare) result.getData().get(0); |  | ||||||
| 	    } else{ |  | ||||||
| 	    	mFileShare = null; |  | ||||||
| 	    } |  | ||||||
| 
 |  | ||||||
| 		// Create the folder |  | ||||||
| 		mFullPath2FolderToShare = mBaseFolderPath + FOLDER_TO_SHARE; |  | ||||||
| 		result = getActivity().createFolder( |  | ||||||
| 				mFullPath2FolderToShare, |  | ||||||
| 				true); |  | ||||||
| 		if (!result.isSuccess()) { |  | ||||||
| 			Utils.logAndThrow(LOG_TAG, result); |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		// Share the folder privately with a group |  | ||||||
| 		result = getActivity().createShare( |  | ||||||
| 				mFullPath2FolderToShare, |  | ||||||
| 				ShareType.GROUP, |  | ||||||
| 				GROUP_SHAREE, |  | ||||||
| 				false, |  | ||||||
| 				"", |  | ||||||
| 				OCShare.MAXIMUM_PERMISSIONS_FOR_FOLDER); |  | ||||||
| 
 |  | ||||||
| 		if (result.isSuccess()){ |  | ||||||
| 			mFolderShare = (OCShare) result.getData().get(0); |  | ||||||
| 		} else{ |  | ||||||
| 			mFolderShare = null; |  | ||||||
| 		} |  | ||||||
| 
 |  | ||||||
| 		Log.v(LOG_TAG, "Remote fixture created."); |  | ||||||
| 		 |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 	 |  | ||||||
| 	public void testUpdateSharePermissions() { |  | ||||||
| 		Log.v(LOG_TAG, "testUpdateSharePermissions in"); |  | ||||||
| 		 |  | ||||||
| 		if (mFileShare != null) { |  | ||||||
| 			/// successful tests |  | ||||||
| 			// Update Share permissions on a shared file |  | ||||||
| 			UpdateRemoteShareOperation updateShare = new UpdateRemoteShareOperation( |  | ||||||
| 					mFileShare.getRemoteId() |  | ||||||
| 			); |  | ||||||
| 			updateShare.setPermissions(OCShare.READ_PERMISSION_FLAG);	// minimum permissions |  | ||||||
| 			RemoteOperationResult result = updateShare.execute(mClient); |  | ||||||
| 			assertTrue(result.isSuccess()); |  | ||||||
| 
 |  | ||||||
| 			// Update Share permissions on a shared folder |  | ||||||
| 			updateShare = new UpdateRemoteShareOperation(mFolderShare.getRemoteId()); |  | ||||||
| 			updateShare.setPermissions(OCShare.READ_PERMISSION_FLAG + OCShare.DELETE_PERMISSION_FLAG); |  | ||||||
| 			result = updateShare.execute(mClient); |  | ||||||
| 			assertTrue(result.isSuccess()); |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 			/// unsuccessful tests |  | ||||||
| 			// Update Share with invalid permissions |  | ||||||
| 			updateShare = new UpdateRemoteShareOperation(mFileShare.getRemoteId()); |  | ||||||
| 			// greater than maximum value |  | ||||||
| 			updateShare.setPermissions(OCShare.MAXIMUM_PERMISSIONS_FOR_FOLDER + 1); |  | ||||||
| 			result = updateShare.execute(mClient); |  | ||||||
| 			assertFalse(result.isSuccess()); |  | ||||||
| 
 |  | ||||||
| 			// Unshare the file before next unsuccessful tests |  | ||||||
| 			RemoveRemoteShareOperation unshare = new RemoveRemoteShareOperation( |  | ||||||
| 					(int) mFileShare.getRemoteId() |  | ||||||
| 			); |  | ||||||
| 			result = unshare.execute(mClient); |  | ||||||
| 			 |  | ||||||
| 			if (result.isSuccess()) {				 |  | ||||||
| 				// Update Share permissions on unknown share |  | ||||||
| 				UpdateRemoteShareOperation updateNoShare = new UpdateRemoteShareOperation( |  | ||||||
| 						mFileShare.getRemoteId() |  | ||||||
| 				); |  | ||||||
| 				updateNoShare.setPermissions(OCShare.READ_PERMISSION_FLAG);	// minimum permissions |  | ||||||
| 				result = updateNoShare.execute(mClient); |  | ||||||
| 				assertFalse(result.isSuccess()); |  | ||||||
| 			} |  | ||||||
| 				 |  | ||||||
| 		} 		 |  | ||||||
| 		 |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 	@Override |  | ||||||
| 	protected void tearDown() throws Exception { |  | ||||||
| 	    Log.v(LOG_TAG, "Deleting remote fixture..."); |  | ||||||
| 		if (mFullPath2FileToShare != null) { |  | ||||||
| 			RemoteOperationResult removeResult = getActivity().removeFile(mFullPath2FileToShare); |  | ||||||
| 			if (!removeResult.isSuccess() && removeResult.getCode() != ResultCode.TIMEOUT) { |  | ||||||
| 				Utils.logAndThrow(LOG_TAG, removeResult); |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 		super.tearDown(); |  | ||||||
| 	    Log.v(LOG_TAG, "Remote fixture delete."); |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	 |  | ||||||
| 	private void initAccessToServer(Context context) { |  | ||||||
| 	    Log.v(LOG_TAG, "Setting up client instance to access OC server..."); |  | ||||||
| 		 |  | ||||||
| 		mServerUri = context.getString(R.string.server_base_url); |  | ||||||
| 		mUser = context.getString(R.string.username); |  | ||||||
| 		mPass = context.getString(R.string.password); |  | ||||||
| 		 |  | ||||||
| 		mClient = new OwnCloudClient( |  | ||||||
| 				Uri.parse(mServerUri),  |  | ||||||
| 				NetworkUtils.getMultiThreadedConnManager() |  | ||||||
| 		); |  | ||||||
| 		mClient.setDefaultTimeouts( |  | ||||||
| 				OwnCloudClientFactory.DEFAULT_DATA_TIMEOUT,  |  | ||||||
| 				OwnCloudClientFactory.DEFAULT_CONNECTION_TIMEOUT); |  | ||||||
| 		mClient.setFollowRedirects(true); |  | ||||||
| 		mClient.setCredentials( |  | ||||||
| 				OwnCloudCredentialsFactory.newBasicCredentials( |  | ||||||
| 						mUser,  |  | ||||||
| 						mPass |  | ||||||
| 				) |  | ||||||
| 		); |  | ||||||
| 		 |  | ||||||
| 	    Log.v(LOG_TAG, "Client instance set up."); |  | ||||||
| 	     |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| } |  | ||||||
| @ -1,283 +0,0 @@ | |||||||
| /* ownCloud Android Library is available under MIT license |  | ||||||
|  *   @author masensio |  | ||||||
|  *   @author David A. Velasco |  | ||||||
|  *   Copyright (C) 2016 ownCloud GmbH. |  | ||||||
|  *    |  | ||||||
|  *   Permission is hereby granted, free of charge, to any person obtaining a copy |  | ||||||
|  *   of this software and associated documentation files (the "Software"), to deal |  | ||||||
|  *   in the Software without restriction, including without limitation the rights |  | ||||||
|  *   to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |  | ||||||
|  *   copies of the Software, and to permit persons to whom the Software is |  | ||||||
|  *   furnished to do so, subject to the following conditions: |  | ||||||
|  *    |  | ||||||
|  *   The above copyright notice and this permission notice shall be included in |  | ||||||
|  *   all copies or substantial portions of the Software. |  | ||||||
|  *    |  | ||||||
|  *   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,  |  | ||||||
|  *   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |  | ||||||
|  *   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND  |  | ||||||
|  *   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS  |  | ||||||
|  *   BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN  |  | ||||||
|  *   ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN  |  | ||||||
|  *   CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |  | ||||||
|  *   THE SOFTWARE. |  | ||||||
|  * |  | ||||||
|  */ |  | ||||||
| 
 |  | ||||||
| package com.owncloud.android.lib.test_project.test; |  | ||||||
| 
 |  | ||||||
| import java.io.File; |  | ||||||
| import java.security.GeneralSecurityException; |  | ||||||
| import java.util.Calendar; |  | ||||||
| 
 |  | ||||||
| import junit.framework.AssertionFailedError; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| import android.content.Context; |  | ||||||
| import android.net.Uri; |  | ||||||
| import android.util.Log; |  | ||||||
| 
 |  | ||||||
| import com.owncloud.android.lib.common.OwnCloudClient; |  | ||||||
| import com.owncloud.android.lib.common.OwnCloudClientFactory; |  | ||||||
| import com.owncloud.android.lib.common.authentication.OwnCloudCredentialsFactory; |  | ||||||
| import com.owncloud.android.lib.common.network.NetworkUtils; |  | ||||||
| import com.owncloud.android.lib.common.operations.RemoteOperationResult; |  | ||||||
| import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode; |  | ||||||
| import com.owncloud.android.lib.resources.shares.OCShare; |  | ||||||
| import com.owncloud.android.lib.resources.shares.RemoveRemoteShareOperation; |  | ||||||
| import com.owncloud.android.lib.resources.shares.ShareType; |  | ||||||
| import com.owncloud.android.lib.resources.shares.UpdateRemoteShareOperation; |  | ||||||
| import com.owncloud.android.lib.test_project.R; |  | ||||||
| import com.owncloud.android.lib.test_project.TestActivity; |  | ||||||
| 
 |  | ||||||
| /** |  | ||||||
|  * Class to test UpdateRemoteShareOperation |  | ||||||
|  * with public shares |  | ||||||
|  * |  | ||||||
|  */ |  | ||||||
| public class UpdatePublicShareTest extends RemoteTest { |  | ||||||
| 	private static final String LOG_TAG = UpdatePublicShareTest.class.getCanonicalName(); |  | ||||||
| 	 |  | ||||||
| 	/* File to share and update.*/ |  | ||||||
| 	private static final String FILE_TO_SHARE = "/fileToShare.txt"; |  | ||||||
| 	 |  | ||||||
| 	/* Folder to share and update */ |  | ||||||
| 	private static final String FOLDER_TO_SHARE = "/folderToShare"; |  | ||||||
| 	 |  | ||||||
| 	// Data for tests  |  | ||||||
| 	private static final String PASSWORD = "password"; |  | ||||||
| 	private static final String PASS_SPECIAL_CHARS = "p@ssw<73>rd"; |  | ||||||
| 	 |  | ||||||
| 	private String mFullPath2FileToShare; |  | ||||||
| 	private String mFullPath2FolderToShare; |  | ||||||
| 	 |  | ||||||
| 	private OCShare mShare; |  | ||||||
| 	private OCShare mFolderShare; |  | ||||||
| 	 |  | ||||||
| 	String mServerUri, mUser, mPass; |  | ||||||
| 	OwnCloudClient mClient = null; |  | ||||||
| 	 |  | ||||||
| 	public UpdatePublicShareTest(){ |  | ||||||
| 		super(); |  | ||||||
| 		 |  | ||||||
| 		Protocol pr = Protocol.getProtocol("https"); |  | ||||||
| 		if (pr == null || !(pr.getSocketFactory() instanceof SelfSignedConfidentSslSocketFactory)) { |  | ||||||
| 			try { |  | ||||||
| 				ProtocolSocketFactory psf = new SelfSignedConfidentSslSocketFactory(); |  | ||||||
| 				Protocol.registerProtocol( |  | ||||||
| 						"https", |  | ||||||
| 						new Protocol("https", psf, 443)); |  | ||||||
| 				 |  | ||||||
| 			} catch (GeneralSecurityException e) { |  | ||||||
| 				throw new AssertionFailedError( |  | ||||||
| 						"Self-signed confident SSL context could not be loaded"); |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 	protected Context getContext() { |  | ||||||
| 		return getActivity(); |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	@Override |  | ||||||
| 	protected void setUp() throws Exception { |  | ||||||
| 	    super.setUp(); |  | ||||||
| 
 |  | ||||||
| 	    // Next initialization cannot be done in the constructor because getContext() is not  |  | ||||||
| 	    // ready yet, returns NULL. |  | ||||||
| 	    initAccessToServer(getContext()); |  | ||||||
| 	     |  | ||||||
| 	    Log.v(LOG_TAG, "Setting up the remote fixture..."); |  | ||||||
| 	     |  | ||||||
| 	    // Upload the file |  | ||||||
| 	    mFullPath2FileToShare = mBaseFolderPath + FILE_TO_SHARE; |  | ||||||
| 	     |  | ||||||
| 	    File textFile = getActivity().extractAsset(TestActivity.ASSETS__TEXT_FILE_NAME); |  | ||||||
| 		RemoteOperationResult result = getActivity().uploadFile( |  | ||||||
| 				textFile.getAbsolutePath(),  |  | ||||||
| 				mFullPath2FileToShare,  |  | ||||||
| 				"txt/plain"); |  | ||||||
| 		if (!result.isSuccess()) { |  | ||||||
| 			Utils.logAndThrow(LOG_TAG, result); |  | ||||||
| 		}	     |  | ||||||
| 		 |  | ||||||
| 		// Share the file with a public link |  | ||||||
| 		result = getActivity().createShare( |  | ||||||
| 				mFullPath2FileToShare,  |  | ||||||
| 				ShareType.PUBLIC_LINK,  |  | ||||||
| 				"",  |  | ||||||
| 				false,  |  | ||||||
| 				"",  |  | ||||||
| 				OCShare.READ_PERMISSION_FLAG); |  | ||||||
| 
 |  | ||||||
| 	    if (result.isSuccess()){ |  | ||||||
| 	    	mShare = (OCShare) result.getData().get(0); |  | ||||||
| 	    } else{ |  | ||||||
| 	    	Utils.logAndThrow(LOG_TAG, result); |  | ||||||
| 	    } |  | ||||||
| 	     |  | ||||||
| 	    // Create the folder |  | ||||||
|  		mFullPath2FolderToShare = mBaseFolderPath + FOLDER_TO_SHARE; |  | ||||||
|  		result = getActivity().createFolder( |  | ||||||
|  				mFullPath2FolderToShare, |  | ||||||
|  				true); |  | ||||||
|  		if (!result.isSuccess()) { |  | ||||||
|  			Utils.logAndThrow(LOG_TAG, result); |  | ||||||
|  		} |  | ||||||
| 
 |  | ||||||
|  		// Share the folder publicly via link |  | ||||||
|  		result = getActivity().createShare( |  | ||||||
|  				mFullPath2FolderToShare, |  | ||||||
|  				ShareType.PUBLIC_LINK, |  | ||||||
|  				"", |  | ||||||
|  				false, |  | ||||||
|  				"", |  | ||||||
|  				OCShare.READ_PERMISSION_FLAG); |  | ||||||
| 
 |  | ||||||
|  		if (result.isSuccess()){ |  | ||||||
|  			mFolderShare = (OCShare) result.getData().get(0); |  | ||||||
|  		} else{ |  | ||||||
|  			Utils.logAndThrow(LOG_TAG, result); |  | ||||||
|  		} |  | ||||||
| 	     |  | ||||||
| 		Log.v(LOG_TAG, "Remote fixtures created."); |  | ||||||
| 		 |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 	 |  | ||||||
| 	public void testUpdatePublicShare() { |  | ||||||
| 		Log.v(LOG_TAG, "testUpdatePublicShare in"); |  | ||||||
| 		 |  | ||||||
| 		if (mShare != null) { |  | ||||||
| 			// successful tests |  | ||||||
| 			// Update Share with password |  | ||||||
| 			UpdateRemoteShareOperation updateShare = new UpdateRemoteShareOperation(mShare.getRemoteId()); |  | ||||||
| 			updateShare.setPassword(PASSWORD); |  | ||||||
| 			RemoteOperationResult result = updateShare.execute(mClient); |  | ||||||
| 			assertTrue(result.isSuccess()); |  | ||||||
| 									 |  | ||||||
| 			// Update Share with password with special characters |  | ||||||
| 			updateShare = new UpdateRemoteShareOperation(mShare.getRemoteId()); |  | ||||||
| 			updateShare.setPassword(PASS_SPECIAL_CHARS); |  | ||||||
| 			result = updateShare.execute(mClient); |  | ||||||
| 			assertTrue(result.isSuccess()); |  | ||||||
| 			 |  | ||||||
| 			// Update Share with expiration date |  | ||||||
| 			updateShare = new UpdateRemoteShareOperation(mShare.getRemoteId()); |  | ||||||
| 			Calendar calendar = Calendar.getInstance(); |  | ||||||
| 			calendar.add(Calendar.DAY_OF_MONTH, 7); |  | ||||||
| 			long expirationDateInMillis = calendar.getTimeInMillis() ; |  | ||||||
| 			updateShare.setExpirationDate(expirationDateInMillis); |  | ||||||
| 			result = updateShare.execute(mClient); |  | ||||||
| 			assertTrue(result.isSuccess()); |  | ||||||
| 
 |  | ||||||
| 			// Update the Folder Share with edit permission |  | ||||||
| 			updateShare = new UpdateRemoteShareOperation(mFolderShare.getRemoteId()); |  | ||||||
| 			updateShare.setPublicUpload(true); |  | ||||||
| 			result = updateShare.execute(mClient); |  | ||||||
| 			assertTrue(result.isSuccess()); |  | ||||||
| 
 |  | ||||||
| 			// unsuccessful test |  | ||||||
| 			// Update Share with expiration date in the past |  | ||||||
| 			updateShare = new UpdateRemoteShareOperation(mShare.getRemoteId()); |  | ||||||
| 			calendar.set(Calendar.YEAR, 2014); |  | ||||||
| 			expirationDateInMillis = calendar.getTimeInMillis() ; |  | ||||||
| 			updateShare.setExpirationDate(expirationDateInMillis); |  | ||||||
| 			result = updateShare.execute(mClient); |  | ||||||
| 			assertFalse(result.isSuccess()); |  | ||||||
| 			 |  | ||||||
| 			// Try to update the file Share with edit permission |  | ||||||
| 			updateShare = new UpdateRemoteShareOperation(mShare.getRemoteId()); |  | ||||||
| 			updateShare.setPublicUpload(true); |  | ||||||
| 			result = updateShare.execute(mClient); |  | ||||||
| 			assertFalse(result.isSuccess()); |  | ||||||
| 
 |  | ||||||
| 			// Unshare the file before the unsuccessful tests |  | ||||||
| 			RemoveRemoteShareOperation unshare = new RemoveRemoteShareOperation((int) mShare.getRemoteId()); |  | ||||||
| 			result = unshare.execute(mClient); |  | ||||||
| 			 |  | ||||||
| 			if (result.isSuccess()) {				 |  | ||||||
| 				// Update Share with password on unknown share |  | ||||||
| 				UpdateRemoteShareOperation updateNoShare = new UpdateRemoteShareOperation(mShare.getRemoteId()); |  | ||||||
| 				updateNoShare.setPassword(PASSWORD); |  | ||||||
| 				result = updateNoShare.execute(mClient); |  | ||||||
| 				assertFalse(result.isSuccess()); |  | ||||||
| 	 |  | ||||||
| 				// Update Share with expiration date on unknown share |  | ||||||
| 				updateNoShare = new UpdateRemoteShareOperation(mShare.getRemoteId()); |  | ||||||
| 				Calendar cal = Calendar.getInstance(); |  | ||||||
| 				cal.add(Calendar.DAY_OF_MONTH, 7); |  | ||||||
| 				expirationDateInMillis = cal.getTimeInMillis() ; |  | ||||||
| 				updateNoShare.setExpirationDate(expirationDateInMillis); |  | ||||||
| 				result = updateNoShare.execute(mClient); |  | ||||||
| 				assertFalse(result.isSuccess());				 |  | ||||||
| 				 |  | ||||||
| 			} |  | ||||||
| 				 |  | ||||||
| 		} 		 |  | ||||||
| 		 |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 	@Override |  | ||||||
| 	protected void tearDown() throws Exception { |  | ||||||
| 	    Log.v(LOG_TAG, "Deleting remote fixture..."); |  | ||||||
| 		if (mFullPath2FileToShare != null) { |  | ||||||
| 			RemoteOperationResult removeResult = getActivity().removeFile(mFullPath2FileToShare); |  | ||||||
| 			if (!removeResult.isSuccess() && removeResult.getCode() != ResultCode.TIMEOUT) { |  | ||||||
| 				Utils.logAndThrow(LOG_TAG, removeResult); |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 		super.tearDown(); |  | ||||||
| 	    Log.v(LOG_TAG, "Remote fixture delete."); |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	 |  | ||||||
| 	private void initAccessToServer(Context context) { |  | ||||||
| 	    Log.v(LOG_TAG, "Setting up client instance to access OC server..."); |  | ||||||
| 		 |  | ||||||
| 		mServerUri = context.getString(R.string.server_base_url); |  | ||||||
| 		mUser = context.getString(R.string.username); |  | ||||||
| 		mPass = context.getString(R.string.password); |  | ||||||
| 		 |  | ||||||
| 		mClient = new OwnCloudClient( |  | ||||||
| 				Uri.parse(mServerUri),  |  | ||||||
| 				NetworkUtils.getMultiThreadedConnManager() |  | ||||||
| 		); |  | ||||||
| 		mClient.setDefaultTimeouts( |  | ||||||
| 				OwnCloudClientFactory.DEFAULT_DATA_TIMEOUT,  |  | ||||||
| 				OwnCloudClientFactory.DEFAULT_CONNECTION_TIMEOUT); |  | ||||||
| 		mClient.setFollowRedirects(true); |  | ||||||
| 		mClient.setCredentials( |  | ||||||
| 				OwnCloudCredentialsFactory.newBasicCredentials( |  | ||||||
| 						mUser,  |  | ||||||
| 						mPass |  | ||||||
| 				) |  | ||||||
| 		); |  | ||||||
| 		 |  | ||||||
| 	    Log.v(LOG_TAG, "Client instance set up."); |  | ||||||
| 	     |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| } |  | ||||||
| @ -1,124 +0,0 @@ | |||||||
| /* ownCloud Android Library is available under MIT license |  | ||||||
|  *   Copyright (C) 2016 ownCloud GmbH. |  | ||||||
|  *    |  | ||||||
|  *   Permission is hereby granted, free of charge, to any person obtaining a copy |  | ||||||
|  *   of this software and associated documentation files (the "Software"), to deal |  | ||||||
|  *   in the Software without restriction, including without limitation the rights |  | ||||||
|  *   to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |  | ||||||
|  *   copies of the Software, and to permit persons to whom the Software is |  | ||||||
|  *   furnished to do so, subject to the following conditions: |  | ||||||
|  *    |  | ||||||
|  *   The above copyright notice and this permission notice shall be included in |  | ||||||
|  *   all copies or substantial portions of the Software. |  | ||||||
|  *    |  | ||||||
|  *   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,  |  | ||||||
|  *   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |  | ||||||
|  *   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND  |  | ||||||
|  *   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS  |  | ||||||
|  *   BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN  |  | ||||||
|  *   ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN  |  | ||||||
|  *   CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |  | ||||||
|  *   THE SOFTWARE. |  | ||||||
|  * |  | ||||||
|  */ |  | ||||||
| 
 |  | ||||||
| package com.owncloud.android.lib.test_project.test; |  | ||||||
| 
 |  | ||||||
| import java.io.File; |  | ||||||
| 
 |  | ||||||
| import com.owncloud.android.lib.common.operations.RemoteOperationResult; |  | ||||||
| import com.owncloud.android.lib.common.operations.RemoteOperationResult.ResultCode; |  | ||||||
| import com.owncloud.android.lib.test_project.TestActivity; |  | ||||||
| 
 |  | ||||||
| /** |  | ||||||
|  * Class to test Update File Operation |  | ||||||
|  * @author masensio |  | ||||||
|  * @author David A. Velasco |  | ||||||
|  * |  | ||||||
|  */ |  | ||||||
| 
 |  | ||||||
| public class UploadFileTest extends RemoteTest { |  | ||||||
| 
 |  | ||||||
| 	private static final String LOG_TAG = UploadFileTest.class.getCanonicalName(); |  | ||||||
| 	 |  | ||||||
| 	private static final String UPLOAD_PATH = "/uploadedImage.png";  |  | ||||||
| 	 |  | ||||||
| 	private static final String CHUNKED_UPLOAD_PATH = "/uploadedVideo.MP4";  |  | ||||||
| 	 |  | ||||||
| 	private static final String FILE_NOT_FOUND_PATH = "/notFoundShouldNotBeHere.png";  |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
| 	private TestActivity mActivity; |  | ||||||
| 	private File mFileToUpload, mFileToUploadWithChunks; |  | ||||||
| 	private String mUploadedFilePath; |  | ||||||
| 	 |  | ||||||
| 	 |  | ||||||
| 	@Override |  | ||||||
| 	  protected void setUp() throws Exception { |  | ||||||
| 	    super.setUp(); |  | ||||||
| 	    setActivityInitialTouchMode(false); |  | ||||||
| 	    mActivity = getActivity(); |  | ||||||
| 	    mUploadedFilePath = null; |  | ||||||
| 	     |  | ||||||
| 		mFileToUpload = mActivity.extractAsset(TestActivity.ASSETS__IMAGE_FILE_NAME); |  | ||||||
| 		mFileToUploadWithChunks = mActivity.extractAsset(TestActivity.ASSETS__VIDEO_FILE_NAME); |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	 |  | ||||||
| 	/** |  | ||||||
| 	 * Test Upload File without chunks |  | ||||||
| 	 */ |  | ||||||
| 	public void testUploadFile() { |  | ||||||
| 
 |  | ||||||
| 		String fullPath2Upload = mBaseFolderPath + UPLOAD_PATH; |  | ||||||
| 		RemoteOperationResult result = mActivity.uploadFile( |  | ||||||
| 				mFileToUpload.getAbsolutePath(),  |  | ||||||
| 				fullPath2Upload,  |  | ||||||
| 				"image/png" |  | ||||||
| 				); |  | ||||||
| 	    mUploadedFilePath = fullPath2Upload; |  | ||||||
| 		assertTrue(result.isSuccess()); |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 	/** |  | ||||||
| 	 * Test Upload File with chunks |  | ||||||
| 	 */ |  | ||||||
| 	public void testUploadFileWithChunks() { |  | ||||||
| 		 |  | ||||||
| 		String fullPath2Upload = mBaseFolderPath + CHUNKED_UPLOAD_PATH; |  | ||||||
| 		RemoteOperationResult result = mActivity.uploadFile( |  | ||||||
| 				mFileToUploadWithChunks.getAbsolutePath(), |  | ||||||
| 				fullPath2Upload,  |  | ||||||
| 				"video/mp4" |  | ||||||
| 				); |  | ||||||
| 	    mUploadedFilePath = fullPath2Upload; |  | ||||||
| 		assertTrue(result.isSuccess()); |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 	/** |  | ||||||
| 	 * Test Upload Not Found File |  | ||||||
| 	 */ |  | ||||||
| 	public void testUploadFileNotFound() { |  | ||||||
| 
 |  | ||||||
| 		String fullPath2Upload = mBaseFolderPath + FILE_NOT_FOUND_PATH; |  | ||||||
| 		RemoteOperationResult result = mActivity.uploadFile( |  | ||||||
| 				FILE_NOT_FOUND_PATH,  |  | ||||||
| 				fullPath2Upload,  |  | ||||||
| 				"image/png" |  | ||||||
| 				); |  | ||||||
| 		mUploadedFilePath = fullPath2Upload; |  | ||||||
| 		assertFalse(result.isSuccess()); |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 
 |  | ||||||
| 	@Override |  | ||||||
| 	protected void tearDown() throws Exception { |  | ||||||
| 		if (mUploadedFilePath != null) { |  | ||||||
| 			RemoteOperationResult removeResult = mActivity.removeFile(mUploadedFilePath); |  | ||||||
| 			if (!removeResult.isSuccess() && removeResult.getCode() != ResultCode.TIMEOUT) { |  | ||||||
| 				Utils.logAndThrow(LOG_TAG, removeResult); |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 		super.tearDown(); |  | ||||||
| 	} |  | ||||||
| } |  | ||||||
| @ -1,55 +0,0 @@ | |||||||
| /* ownCloud Android Library is available under MIT license |  | ||||||
|  *   Copyright (C) 2016 ownCloud GmbH. |  | ||||||
|  *    |  | ||||||
|  *   Permission is hereby granted, free of charge, to any person obtaining a copy |  | ||||||
|  *   of this software and associated documentation files (the "Software"), to deal |  | ||||||
|  *   in the Software without restriction, including without limitation the rights |  | ||||||
|  *   to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |  | ||||||
|  *   copies of the Software, and to permit persons to whom the Software is |  | ||||||
|  *   furnished to do so, subject to the following conditions: |  | ||||||
|  *    |  | ||||||
|  *   The above copyright notice and this permission notice shall be included in |  | ||||||
|  *   all copies or substantial portions of the Software. |  | ||||||
|  *    |  | ||||||
|  *   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,  |  | ||||||
|  *   EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |  | ||||||
|  *   MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND  |  | ||||||
|  *   NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS  |  | ||||||
|  *   BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN  |  | ||||||
|  *   ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN  |  | ||||||
|  *   CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN |  | ||||||
|  *   THE SOFTWARE. |  | ||||||
|  * |  | ||||||
|  */ |  | ||||||
| 
 |  | ||||||
| package com.owncloud.android.lib.test_project.test; |  | ||||||
| 
 |  | ||||||
| import android.content.Context; |  | ||||||
| import android.util.Log; |  | ||||||
| 
 |  | ||||||
| import com.owncloud.android.lib.common.operations.RemoteOperationResult; |  | ||||||
| import com.owncloud.android.lib.test_project.R; |  | ||||||
| 
 |  | ||||||
| public class Utils { |  | ||||||
| 
 |  | ||||||
| 	private static String LOG_TAG = Utils.class.getSimpleName(); |  | ||||||
| 	 |  | ||||||
| 	private static String sBuildNumber = null; |  | ||||||
| 	 |  | ||||||
| 	public static void logAndThrow(String tag, RemoteOperationResult result) throws Exception { |  | ||||||
| 		Log.e(tag, result.getLogMessage(), result.getException()); |  | ||||||
| 		throw new Exception(result.getLogMessage(), result.getException()); |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| 	public static String getBuildNumber(Context context) { |  | ||||||
| 		if (sBuildNumber == null) { |  | ||||||
| 			sBuildNumber = context.getString(R.string.build_number); |  | ||||||
| 			if (sBuildNumber == null || sBuildNumber.length() == 0) { |  | ||||||
| 				Log.w(LOG_TAG, "Build number unknown, using current time instead"); |  | ||||||
| 				sBuildNumber = Long.toString(System.currentTimeMillis()); |  | ||||||
| 			} |  | ||||||
| 		} |  | ||||||
| 		return sBuildNumber; |  | ||||||
| 	} |  | ||||||
| 	 |  | ||||||
| } |  | ||||||