{"action":"created","comment":{"url":"https://api.github.com/repos/codice/ddf/pulls/comments/79017091","id":79017091,"diff_hunk":"@@ -250,6 +249,67 @@ public void testFtpsPut() throws Exception {\n     }\n \n     /**\n+     * Test the ftp command sequence of uploading a dot-file (i.e. .foo) and then renaming that\n+     * file to the final filename (i.e. test.txt). Confirm that the catalog contains only one\n+     * object and the title of that object is \"test.txt\".\n+     */\n+    @Test\n+    public void testFtpsPutDotFile() throws Exception {\n+\n+        setClientAuthConfiguration(NEED);\n+        FTPSClient client = createSecureClient(true);\n+\n+        String dotFilename = \".foo\";\n+        String finalFilename = \"test.txt\";\n+\n+        ftpPut(client, dotFilename, SAMPLE_DATA);\n+        boolean ret = client.rename(dotFilename, finalFilename);\n+        assertTrue(ret);\n+\n+        Response response = executeOpenSearch(\"xml\", \"q=*\", \"count=100\");\n+\n+        response.then()\n+                .body(\"metacards.metacard.size()\", equalTo(1));\n+        response.then()\n+                .body(\"metacards.metacard.string.findAll { it.@name == 'title' }.value\",\n+                        equalTo(finalFilename));\n+\n+        // clean up test data\n+        TestCatalog.deleteMetacard(getMetacardIdFromResponse(response));\n+        disconnectClient(client);\n+\n+    }\n+\n+    @Test\n+    public void testFtpsMkdirCwdPutFile() throws Exception {\n+\n+        setClientAuthConfiguration(NEED);\n+        FTPSClient client = createSecureClient(true);\n+\n+        String newDir = \"newDirectory\";\n+        String finalFilename = \"test.txt\";\n+\n+        boolean ret = client.makeDirectory(newDir);\n+        assertTrue(ret);\n+        ret = client.changeWorkingDirectory(newDir);\n+        assertTrue(ret);\n+        ftpPut(client, finalFilename, SAMPLE_DATA);\n+\n+        Response response = executeOpenSearch(\"xml\", \"q=*\", \"count=100\");\n+\n+        response.then()","path":"distribution/test/itests/test-itests-ddf/src/test/java/ddf/test/itests/catalog/TestFtp.java","position":78,"original_position":78,"commit_id":"9cd998e78b8b50e607cacb8bc273658ba3a9db53","original_commit_id":"9cd998e78b8b50e607cacb8bc273658ba3a9db53","user":{"login":"peterhuffer","id":17572782,"avatar_url":"https://avatars.githubusercontent.com/u/17572782?v=3","gravatar_id":"","url":"https://api.github.com/users/peterhuffer","html_url":"https://github.com/peterhuffer","followers_url":"https://api.github.com/users/peterhuffer/followers","following_url":"https://api.github.com/users/peterhuffer/following{/other_user}","gists_url":"https://api.github.com/users/peterhuffer/gists{/gist_id}","starred_url":"https://api.github.com/users/peterhuffer/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/peterhuffer/subscriptions","organizations_url":"https://api.github.com/users/peterhuffer/orgs","repos_url":"https://api.github.com/users/peterhuffer/repos","events_url":"https://api.github.com/users/peterhuffer/events{/privacy}","received_events_url":"https://api.github.com/users/peterhuffer/received_events","type":"User","site_admin":false},"body":"Same here. We should wrap these in a `WaitCondition`s to avoid a race condition.","created_at":"2016-09-15T17:22:32Z","updated_at":"2016-09-15T17:22:38Z","html_url":"https://github.com/codice/ddf/pull/1260#discussion_r79017091","pull_request_url":"https://api.github.com/repos/codice/ddf/pulls/1260","_links":{"self":{"href":"https://api.github.com/repos/codice/ddf/pulls/comments/79017091"},"html":{"href":"https://github.com/codice/ddf/pull/1260#discussion_r79017091"},"pull_request":{"href":"https://api.github.com/repos/codice/ddf/pulls/1260"}}},"pull_request":{"url":"https://api.github.com/repos/codice/ddf/pulls/1260","id":84934942,"html_url":"https://github.com/codice/ddf/pull/1260","diff_url":"https://github.com/codice/ddf/pull/1260.diff","patch_url":"https://github.com/codice/ddf/pull/1260.patch","issue_url":"https://api.github.com/repos/codice/ddf/issues/1260","number":1260,"state":"open","locked":false,"title":"DDF-2468 Add support for more FTP commands","user":{"login":"glenhein","id":17837152,"avatar_url":"https://avatars.githubusercontent.com/u/17837152?v=3","gravatar_id":"","url":"https://api.github.com/users/glenhein","html_url":"https://github.com/glenhein","followers_url":"https://api.github.com/users/glenhein/followers","following_url":"https://api.github.com/users/glenhein/following{/other_user}","gists_url":"https://api.github.com/users/glenhein/gists{/gist_id}","starred_url":"https://api.github.com/users/glenhein/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/glenhein/subscriptions","organizations_url":"https://api.github.com/users/glenhein/orgs","repos_url":"https://api.github.com/users/glenhein/repos","events_url":"https://api.github.com/users/glenhein/events{/privacy}","received_events_url":"https://api.github.com/users/glenhein/received_events","type":"User","site_admin":false},"body":"#### What does this PR do?\r\n\r\nSTOU - Full support is added. The FTP server will return a success message that\r\nincludes the metacard id, which the client can interpret as the unique name given\r\nto the object.\r\n\r\nSITE - Since the FTP server does not have any site-specific commands, the server\r\nnow returns the status code 202, which indicates that SITE is not implemented.\r\n\r\nDELE, RETR, RMD, MKD, APPE, RNTO - The FTP server returns a response indicating\r\nsuccess, even though no action was taken. Some clients, for example, always\r\nattempt to make a new directory and then CD to it. This isn't necessary from\r\nthe DDF point of view. Previously, the server would return an error that would\r\ncause the client to fail.\r\n\r\nAdd support for clients that PUT a dot-file and then rename the dot-file to\r\nthe final filename. The rename command will result in the object being stored\r\nin the catalog.\r\n\r\nAdd itest for clients that the create a directory, change to that directory, and\r\nthen PUT content.\r\n\r\nThe CWD always returns a success response to support clients that use a\r\nMKDIR/CWD/PUT command sequence.\r\n\r\n#### Who is reviewing it (please choose AT LEAST two reviewers that need to approve the PR before it can get merged; if a component team is listed, at least one of its members needs to approve)?\r\n@peterhuffer \r\n@beyelerb \r\n@troymohl \r\n@ricklarsen \r\n\r\n#### Choose 2 committers to review/merge the PR (please choose ONLY two committers from below, delete the rest).\r\n@beyelerb\r\n@kcwire\r\n#### How should this be tested?\r\nBuild and install DDF. Enable the catalog-ftp feature. From the command line, start an ftp client:\r\n\r\n$ ftp admin@localhost 8021\r\nftp> binary\r\nftp> sunique on\r\nftp> put some-file.pdf\r\n\r\nFrom the catalog search, confirm that the file was uploaded.\r\n\r\nFor the dot-file/rename feature:\r\n\r\n$ ftp admin@localhost 8021\r\nftp> binary\r\nftp> put some-file.pdf .foo\r\nftp> rename .foo some-file.pdf\r\n\r\nFrom the catalog search, confirm that the file was uploaded.\r\n\r\n#### Any background context you want to provide?\r\n#### What are the relevant tickets?\r\nDDF-2468\r\n#### Screenshots (if appropriate)\r\n#### Checklist:\r\n- [X] Documentation Updated\r\n- [X] Update / Add Unit Tests\r\n- [X] Update / Add Integration Tests\r\n","created_at":"2016-09-12T20:03:42Z","updated_at":"2016-09-15T17:22:38Z","closed_at":null,"merged_at":null,"merge_commit_sha":"cc83cd2f09d5ca03701c3456ff1be95fb1311dc4","assignee":{"login":"beyelerb","id":4429907,"avatar_url":"https://avatars.githubusercontent.com/u/4429907?v=3","gravatar_id":"","url":"https://api.github.com/users/beyelerb","html_url":"https://github.com/beyelerb","followers_url":"https://api.github.com/users/beyelerb/followers","following_url":"https://api.github.com/users/beyelerb/following{/other_user}","gists_url":"https://api.github.com/users/beyelerb/gists{/gist_id}","starred_url":"https://api.github.com/users/beyelerb/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/beyelerb/subscriptions","organizations_url":"https://api.github.com/users/beyelerb/orgs","repos_url":"https://api.github.com/users/beyelerb/repos","events_url":"https://api.github.com/users/beyelerb/events{/privacy}","received_events_url":"https://api.github.com/users/beyelerb/received_events","type":"User","site_admin":false},"assignees":[{"login":"beyelerb","id":4429907,"avatar_url":"https://avatars.githubusercontent.com/u/4429907?v=3","gravatar_id":"","url":"https://api.github.com/users/beyelerb","html_url":"https://github.com/beyelerb","followers_url":"https://api.github.com/users/beyelerb/followers","following_url":"https://api.github.com/users/beyelerb/following{/other_user}","gists_url":"https://api.github.com/users/beyelerb/gists{/gist_id}","starred_url":"https://api.github.com/users/beyelerb/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/beyelerb/subscriptions","organizations_url":"https://api.github.com/users/beyelerb/orgs","repos_url":"https://api.github.com/users/beyelerb/repos","events_url":"https://api.github.com/users/beyelerb/events{/privacy}","received_events_url":"https://api.github.com/users/beyelerb/received_events","type":"User","site_admin":false},{"login":"kcwire","id":4631300,"avatar_url":"https://avatars.githubusercontent.com/u/4631300?v=3","gravatar_id":"","url":"https://api.github.com/users/kcwire","html_url":"https://github.com/kcwire","followers_url":"https://api.github.com/users/kcwire/followers","following_url":"https://api.github.com/users/kcwire/following{/other_user}","gists_url":"https://api.github.com/users/kcwire/gists{/gist_id}","starred_url":"https://api.github.com/users/kcwire/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/kcwire/subscriptions","organizations_url":"https://api.github.com/users/kcwire/orgs","repos_url":"https://api.github.com/users/kcwire/repos","events_url":"https://api.github.com/users/kcwire/events{/privacy}","received_events_url":"https://api.github.com/users/kcwire/received_events","type":"User","site_admin":false}],"milestone":null,"commits_url":"https://api.github.com/repos/codice/ddf/pulls/1260/commits","review_comments_url":"https://api.github.com/repos/codice/ddf/pulls/1260/comments","review_comment_url":"https://api.github.com/repos/codice/ddf/pulls/comments{/number}","comments_url":"https://api.github.com/repos/codice/ddf/issues/1260/comments","statuses_url":"https://api.github.com/repos/codice/ddf/statuses/9cd998e78b8b50e607cacb8bc273658ba3a9db53","head":{"label":"glenhein:DDF-2468","ref":"DDF-2468","sha":"9cd998e78b8b50e607cacb8bc273658ba3a9db53","user":{"login":"glenhein","id":17837152,"avatar_url":"https://avatars.githubusercontent.com/u/17837152?v=3","gravatar_id":"","url":"https://api.github.com/users/glenhein","html_url":"https://github.com/glenhein","followers_url":"https://api.github.com/users/glenhein/followers","following_url":"https://api.github.com/users/glenhein/following{/other_user}","gists_url":"https://api.github.com/users/glenhein/gists{/gist_id}","starred_url":"https://api.github.com/users/glenhein/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/glenhein/subscriptions","organizations_url":"https://api.github.com/users/glenhein/orgs","repos_url":"https://api.github.com/users/glenhein/repos","events_url":"https://api.github.com/users/glenhein/events{/privacy}","received_events_url":"https://api.github.com/users/glenhein/received_events","type":"User","site_admin":false},"repo":{"id":54487089,"name":"ddf","full_name":"glenhein/ddf","owner":{"login":"glenhein","id":17837152,"avatar_url":"https://avatars.githubusercontent.com/u/17837152?v=3","gravatar_id":"","url":"https://api.github.com/users/glenhein","html_url":"https://github.com/glenhein","followers_url":"https://api.github.com/users/glenhein/followers","following_url":"https://api.github.com/users/glenhein/following{/other_user}","gists_url":"https://api.github.com/users/glenhein/gists{/gist_id}","starred_url":"https://api.github.com/users/glenhein/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/glenhein/subscriptions","organizations_url":"https://api.github.com/users/glenhein/orgs","repos_url":"https://api.github.com/users/glenhein/repos","events_url":"https://api.github.com/users/glenhein/events{/privacy}","received_events_url":"https://api.github.com/users/glenhein/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/glenhein/ddf","description":"The Distributed Data Framework - Federated Open Geospatial Consortium (OGC) filter powered metadata catalog with SAML Web SSO secured container","fork":true,"url":"https://api.github.com/repos/glenhein/ddf","forks_url":"https://api.github.com/repos/glenhein/ddf/forks","keys_url":"https://api.github.com/repos/glenhein/ddf/keys{/key_id}","collaborators_url":"https://api.github.com/repos/glenhein/ddf/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/glenhein/ddf/teams","hooks_url":"https://api.github.com/repos/glenhein/ddf/hooks","issue_events_url":"https://api.github.com/repos/glenhein/ddf/issues/events{/number}","events_url":"https://api.github.com/repos/glenhein/ddf/events","assignees_url":"https://api.github.com/repos/glenhein/ddf/assignees{/user}","branches_url":"https://api.github.com/repos/glenhein/ddf/branches{/branch}","tags_url":"https://api.github.com/repos/glenhein/ddf/tags","blobs_url":"https://api.github.com/repos/glenhein/ddf/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/glenhein/ddf/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/glenhein/ddf/git/refs{/sha}","trees_url":"https://api.github.com/repos/glenhein/ddf/git/trees{/sha}","statuses_url":"https://api.github.com/repos/glenhein/ddf/statuses/{sha}","languages_url":"https://api.github.com/repos/glenhein/ddf/languages","stargazers_url":"https://api.github.com/repos/glenhein/ddf/stargazers","contributors_url":"https://api.github.com/repos/glenhein/ddf/contributors","subscribers_url":"https://api.github.com/repos/glenhein/ddf/subscribers","subscription_url":"https://api.github.com/repos/glenhein/ddf/subscription","commits_url":"https://api.github.com/repos/glenhein/ddf/commits{/sha}","git_commits_url":"https://api.github.com/repos/glenhein/ddf/git/commits{/sha}","comments_url":"https://api.github.com/repos/glenhein/ddf/comments{/number}","issue_comment_url":"https://api.github.com/repos/glenhein/ddf/issues/comments{/number}","contents_url":"https://api.github.com/repos/glenhein/ddf/contents/{+path}","compare_url":"https://api.github.com/repos/glenhein/ddf/compare/{base}...{head}","merges_url":"https://api.github.com/repos/glenhein/ddf/merges","archive_url":"https://api.github.com/repos/glenhein/ddf/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/glenhein/ddf/downloads","issues_url":"https://api.github.com/repos/glenhein/ddf/issues{/number}","pulls_url":"https://api.github.com/repos/glenhein/ddf/pulls{/number}","milestones_url":"https://api.github.com/repos/glenhein/ddf/milestones{/number}","notifications_url":"https://api.github.com/repos/glenhein/ddf/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/glenhein/ddf/labels{/name}","releases_url":"https://api.github.com/repos/glenhein/ddf/releases{/id}","deployments_url":"https://api.github.com/repos/glenhein/ddf/deployments","created_at":"2016-03-22T15:36:01Z","updated_at":"2016-03-22T15:36:13Z","pushed_at":"2016-09-15T16:32:40Z","git_url":"git://github.com/glenhein/ddf.git","ssh_url":"git@github.com:glenhein/ddf.git","clone_url":"https://github.com/glenhein/ddf.git","svn_url":"https://github.com/glenhein/ddf","homepage":"","size":149883,"stargazers_count":0,"watchers_count":0,"language":"Java","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"codice:master","ref":"master","sha":"6578fed2b9c2a2acc09835009ef012e132179fda","user":{"login":"codice","id":2386734,"avatar_url":"https://avatars.githubusercontent.com/u/2386734?v=3","gravatar_id":"","url":"https://api.github.com/users/codice","html_url":"https://github.com/codice","followers_url":"https://api.github.com/users/codice/followers","following_url":"https://api.github.com/users/codice/following{/other_user}","gists_url":"https://api.github.com/users/codice/gists{/gist_id}","starred_url":"https://api.github.com/users/codice/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/codice/subscriptions","organizations_url":"https://api.github.com/users/codice/orgs","repos_url":"https://api.github.com/users/codice/repos","events_url":"https://api.github.com/users/codice/events{/privacy}","received_events_url":"https://api.github.com/users/codice/received_events","type":"Organization","site_admin":false},"repo":{"id":15173563,"name":"ddf","full_name":"codice/ddf","owner":{"login":"codice","id":2386734,"avatar_url":"https://avatars.githubusercontent.com/u/2386734?v=3","gravatar_id":"","url":"https://api.github.com/users/codice","html_url":"https://github.com/codice","followers_url":"https://api.github.com/users/codice/followers","following_url":"https://api.github.com/users/codice/following{/other_user}","gists_url":"https://api.github.com/users/codice/gists{/gist_id}","starred_url":"https://api.github.com/users/codice/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/codice/subscriptions","organizations_url":"https://api.github.com/users/codice/orgs","repos_url":"https://api.github.com/users/codice/repos","events_url":"https://api.github.com/users/codice/events{/privacy}","received_events_url":"https://api.github.com/users/codice/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/codice/ddf","description":"Distributed Data Framework - an open source, modular integration framework.","fork":false,"url":"https://api.github.com/repos/codice/ddf","forks_url":"https://api.github.com/repos/codice/ddf/forks","keys_url":"https://api.github.com/repos/codice/ddf/keys{/key_id}","collaborators_url":"https://api.github.com/repos/codice/ddf/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/codice/ddf/teams","hooks_url":"https://api.github.com/repos/codice/ddf/hooks","issue_events_url":"https://api.github.com/repos/codice/ddf/issues/events{/number}","events_url":"https://api.github.com/repos/codice/ddf/events","assignees_url":"https://api.github.com/repos/codice/ddf/assignees{/user}","branches_url":"https://api.github.com/repos/codice/ddf/branches{/branch}","tags_url":"https://api.github.com/repos/codice/ddf/tags","blobs_url":"https://api.github.com/repos/codice/ddf/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/codice/ddf/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/codice/ddf/git/refs{/sha}","trees_url":"https://api.github.com/repos/codice/ddf/git/trees{/sha}","statuses_url":"https://api.github.com/repos/codice/ddf/statuses/{sha}","languages_url":"https://api.github.com/repos/codice/ddf/languages","stargazers_url":"https://api.github.com/repos/codice/ddf/stargazers","contributors_url":"https://api.github.com/repos/codice/ddf/contributors","subscribers_url":"https://api.github.com/repos/codice/ddf/subscribers","subscription_url":"https://api.github.com/repos/codice/ddf/subscription","commits_url":"https://api.github.com/repos/codice/ddf/commits{/sha}","git_commits_url":"https://api.github.com/repos/codice/ddf/git/commits{/sha}","comments_url":"https://api.github.com/repos/codice/ddf/comments{/number}","issue_comment_url":"https://api.github.com/repos/codice/ddf/issues/comments{/number}","contents_url":"https://api.github.com/repos/codice/ddf/contents/{+path}","compare_url":"https://api.github.com/repos/codice/ddf/compare/{base}...{head}","merges_url":"https://api.github.com/repos/codice/ddf/merges","archive_url":"https://api.github.com/repos/codice/ddf/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/codice/ddf/downloads","issues_url":"https://api.github.com/repos/codice/ddf/issues{/number}","pulls_url":"https://api.github.com/repos/codice/ddf/pulls{/number}","milestones_url":"https://api.github.com/repos/codice/ddf/milestones{/number}","notifications_url":"https://api.github.com/repos/codice/ddf/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/codice/ddf/labels{/name}","releases_url":"https://api.github.com/repos/codice/ddf/releases{/id}","deployments_url":"https://api.github.com/repos/codice/ddf/deployments","created_at":"2013-12-13T20:38:28Z","updated_at":"2016-09-14T21:15:25Z","pushed_at":"2016-09-15T17:16:42Z","git_url":"git://github.com/codice/ddf.git","ssh_url":"git@github.com:codice/ddf.git","clone_url":"https://github.com/codice/ddf.git","svn_url":"https://github.com/codice/ddf","homepage":"http://ddf.codice.org","size":286993,"stargazers_count":45,"watchers_count":45,"language":"Java","has_issues":false,"has_downloads":true,"has_wiki":false,"has_pages":true,"forks_count":90,"mirror_url":null,"open_issues_count":38,"forks":90,"open_issues":38,"watchers":45,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/codice/ddf/pulls/1260"},"html":{"href":"https://github.com/codice/ddf/pull/1260"},"issue":{"href":"https://api.github.com/repos/codice/ddf/issues/1260"},"comments":{"href":"https://api.github.com/repos/codice/ddf/issues/1260/comments"},"review_comments":{"href":"https://api.github.com/repos/codice/ddf/pulls/1260/comments"},"review_comment":{"href":"https://api.github.com/repos/codice/ddf/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/codice/ddf/pulls/1260/commits"},"statuses":{"href":"https://api.github.com/repos/codice/ddf/statuses/9cd998e78b8b50e607cacb8bc273658ba3a9db53"}}}}
{"actor":{"display_login":"peterhuffer"}}