<commit_before>/**
 * PODD is an OWL ontology database used for scientific project management
 *
 * Copyright (C) 2009-2013 The University Of Queensland
 *
 * This program is free software: you can redistribute it and/or modify it under the terms of the
 * GNU Affero General Public License as published by the Free Software Foundation, either version 3
 * of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
 * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License along with this program.
 * If not, see <http://www.gnu.org/licenses/>.
 */
package com.github.podd.client.impl.restlet.test;

import java.io.IOException;
import java.io.InputStream;
import java.nio.file.FileAlreadyExistsException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardCopyOption;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

import org.junit.Rule;
import org.junit.rules.TemporaryFolder;
import org.restlet.Client;
import org.restlet.representation.Representation;
import org.restlet.resource.ClientResource;

import com.github.podd.api.data.DataReference;
import com.github.podd.api.data.SSHFileReference;
import com.github.podd.client.api.PoddClient;
import com.github.podd.client.api.test.AbstractPoddClientTest;
import com.github.podd.client.impl.restlet.RestletPoddClientImpl;
import com.github.podd.impl.data.SSHFileReferenceImpl;
import com.github.podd.impl.data.test.SSHService;

/**
 * Integration test for the Restlet PODD Client API implementation.
 *
 * @author <NAME> <EMAIL>
 *
 */
public class RestletPoddClientImplIntegrationTest extends AbstractPoddClientTest
{
    @Rule
    public TemporaryFolder tempDirectory = new TemporaryFolder();

    private SSHService sshd;

    private Path tempFolder;
    private Map<String, Path> tempFiles = new ConcurrentHashMap<String, Path>();

    @Override
    protected DataReference deployFileReference(final String label) throws Exception
    {
        Path nextTempFile;

        if(this.tempFiles.containsKey(label))
        {
            nextTempFile = this.tempFiles.get(label);
        }
        else
        {
            nextTempFile = this.tempFolder.resolve("file-" + label.hashCode() + ".data");
        }

        if(!Files.exists(nextTempFile))
        {
            // Put a file into the server for this file reference to ensure that it validates to a
            // file
            try (final InputStream testUploadedFile =
                    this.getClass().getResourceAsStream("/test/artifacts/basicProject-1.rdf");)
                    {
                Files.createFile(nextTempFile);

                this.tempFiles.put(label, nextTempFile);
                Files.copy(testUploadedFile, nextTempFile, StandardCopyOption.REPLACE_EXISTING);
                    }
            catch(final FileAlreadyExistsException e)
            {
                // Ignore, the file may have been created by another thread since we entered this
                // block.
            }
        }

        final SSHFileReference nextFileReference = new SSHFileReferenceImpl();

        nextFileReference.setPath(this.tempFolder.toAbsolutePath().toString());
        nextFileReference.setFilename(nextTempFile.getFileName().toString());
        nextFileReference.setRepositoryAlias("localssh");
        nextFileReference.setLabel(label);

        return nextFileReference;
    }

    @Override
    protected void endFileRepositoryTest() throws Exception
    {
        this.sshd.stopTestSSHServer(this.tempFolder);
    }

    @Override
    protected PoddClient getNewPoddClientInstance()
    {
        return new RestletPoddClientImpl();
    }

    @Override
    protected String getTestPoddServerUrl()
    {
        return "http://localhost:9090/podd-test";
    }

    @Override
    protected void resetTestServers() throws IOException
    {
        // Reset server after each test so that assertions are not dependent on the order of the
        // tests, which is unpredictable
        // HACK: This presumes that this reset service will exist and that it has this URL
        final ClientResource clientResource = new ClientResource(this.getTestPoddServerUrl() + "/reset/r3set");
        try
        {
            final Representation representation = clientResource.get();
            try
            {
                representation.exhaust();
            }
            finally
            {
                representation.release();
            }
        }
        catch(final Throwable e)
        {
            this.log.error("FAILURE: Could not reset PODD server after test complete", e);
        }
        finally
        {
            if(clientResource.getNext() != null && clientResource.getNext() instanceof Client)
            {
                final Client c = (Client)clientResource.getNext();
                try
                {
                    c.stop();
                }
                catch(final Throwable e)
                {
                    this.log.error("FAILURE: Could not reset PODD server after test complete", e);
                }
            }

        }
    }

    @Override
    protected void startFileRepositoryTest() throws Exception
    {
        this.tempFolder = this.tempDirectory.newFolder().toPath();

        this.sshd = new SSHService();
        // This is setup to match the "localssh" repository alias defined in
        // src/main/resources/test-alias.ttl
        this.sshd.TEST_SSH_SERVICE_PORT = 9856;

        this.sshd.startTestSSHServer(this.tempFolder);
    }

}
<commit_msg>fix base podd client test<commit_after>/**
 * PODD is an OWL ontology database used for scientific project management
 *
 * Copyright (C) 2009-2013 The University Of Queensland
 *
 * This program is free software: you can redistribute it and/or modify it under the terms of the
 * GNU Affero General Public License as published by the Free Software Foundation, either version 3
 * of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
 * even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
 * Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License along with this program.
 * If not, see <http://www.gnu.org/licenses/>.
 */
package com.github.podd.client.impl.restlet.test;

import java.io.IOException;
import java.io.InputStream;
import java.nio.file.FileAlreadyExistsException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardCopyOption;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

import org.junit.Rule;
import org.junit.rules.TemporaryFolder;
import org.restlet.Client;
import org.restlet.representation.Representation;
import org.restlet.resource.ClientResource;

import com.github.podd.api.data.DataReference;
import com.github.podd.api.data.SSHFileReference;
import com.github.podd.client.api.PoddClient;
import com.github.podd.client.api.test.AbstractPoddClientTest;
import com.github.podd.client.impl.restlet.RestletPoddClientImpl;
import com.github.podd.impl.data.SSHFileReferenceImpl;
import com.github.podd.impl.data.test.SSHService;

/**
 * Integration test for the Restlet PODD Client API implementation.
 *
 * @author <NAME> <EMAIL>
 *
 */
public class RestletPoddClientImplIntegrationTest extends AbstractPoddClientTest
{
    @Rule
    public TemporaryFolder tempDirectory = new TemporaryFolder();
    
    private SSHService sshd;
    
    private Path tempFolder;
    private Map<String, Path> tempFiles = new ConcurrentHashMap<String, Path>();
    
    @Override
    protected DataReference deployFileReference(final String label) throws Exception
    {
        Path nextTempFile;
        
        if(this.tempFiles.containsKey(label))
        {
            nextTempFile = this.tempFiles.get(label);
        }
        else
        {
            nextTempFile = this.tempFolder.resolve("file-" + label.hashCode() + ".data");
        }
        
        if(!Files.exists(nextTempFile))
        {
            // Put a file into the server for this file reference to ensure that it validates to a
            // file
            try (final InputStream testUploadedFile =
                    this.getClass().getResourceAsStream("/test/artifacts/basicProject-1.rdf");)
            {
                Files.createFile(nextTempFile);
                
                this.tempFiles.put(label, nextTempFile);
                Files.copy(testUploadedFile, nextTempFile, StandardCopyOption.REPLACE_EXISTING);
            }
            catch(final FileAlreadyExistsException e)
            {
                // Ignore, the file may have been created by another thread since we entered this
                // block.
            }
        }
        
        final SSHFileReference nextFileReference = new SSHFileReferenceImpl();
        
        nextFileReference.setPath(this.tempFolder.toAbsolutePath().toString());
        nextFileReference.setFilename(nextTempFile.getFileName().toString());
        nextFileReference.setRepositoryAlias("localssh");
        nextFileReference.setLabel(label);
        
        return nextFileReference;
    }
    
    @Override
    protected void endFileRepositoryTest() throws Exception
    {
        this.sshd.stopTestSSHServer(this.tempFolder);
    }
    
    @Override
    protected PoddClient getNewPoddClientInstance()
    {
        this.isPoddClientTest(true);
        return new RestletPoddClientImpl(this.getTestPoddServerUrl());
    }
    
    @Override
    protected String getTestPoddServerUrl()
    {
        return "http://localhost:9090/podd-test";
    }
    
    @Override
    protected void resetTestServers() throws IOException
    {
        // Reset server after each test so that assertions are not dependent on the order of the
        // tests, which is unpredictable
        // HACK: This presumes that this reset service will exist and that it has this URL
        final ClientResource clientResource = new ClientResource(this.getTestPoddServerUrl() + "/reset/r3set");
        try
        {
            final Representation representation = clientResource.get();
            try
            {
                representation.exhaust();
            }
            finally
            {
                representation.release();
            }
        }
        catch(final Throwable e)
        {
            this.log.error("FAILURE: Could not reset PODD server after test complete", e);
        }
        finally
        {
            if(clientResource.getNext() != null && clientResource.getNext() instanceof Client)
            {
                final Client c = (Client)clientResource.getNext();
                try
                {
                    c.stop();
                }
                catch(final Throwable e)
                {
                    this.log.error("FAILURE: Could not reset PODD server after test complete", e);
                }
            }
            
        }
    }
    
    @Override
    protected void startFileRepositoryTest() throws Exception
    {
        this.tempFolder = this.tempDirectory.newFolder().toPath();
        
        this.sshd = new SSHService();
        // This is setup to match the "localssh" repository alias defined in
        // src/main/resources/test-alias.ttl
        this.sshd.TEST_SSH_SERVICE_PORT = 9856;
        
        this.sshd.startTestSSHServer(this.tempFolder);
    }
    
}

{'fraction_non_alphanumeric': 0.08310742121314808, 'fraction_numerical': 0.0032192477126397833, 'mean_word_length': 2.355599772598067, 'pattern_counts': {'":': 0, '<': 13, '<?xml version=': 0, '>': 13, 'https://': 0, 'lorem ipsum': 0, 'www.': 2, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '23855', 'n_tokens_mistral': 3147, 'n_tokens_neox': 3041, 'n_words': 837}