Package org.apache.sqoop.repository.derby

Source Code of org.apache.sqoop.repository.derby.TestSubmissionHandling

/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements.  See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership.  The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License.  You may obtain a copy of the License at
*
*     http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.sqoop.repository.derby;

import org.apache.sqoop.model.MSubmission;
import org.apache.sqoop.submission.SubmissionStatus;
import org.apache.sqoop.submission.counter.Counter;
import org.apache.sqoop.submission.counter.CounterGroup;
import org.apache.sqoop.submission.counter.Counters;

import java.util.Calendar;
import java.util.Date;
import java.util.List;

/**
*
*/
public class TestSubmissionHandling extends DerbyTestCase {

  DerbyRepositoryHandler handler;

  @Override
  public void setUp() throws Exception {
    super.setUp();

    handler = new DerbyRepositoryHandler();

    // We always needs schema for this test case
    createSchema();

    // We always needs connector and framework structures in place
    loadConnectorAndFramework();

    // We also always needs connection metadata in place
    loadConnections();

    // And finally we always needs job metadata in place
    loadJobs();
  }

  public void testFindSubmissionsUnfinished() throws Exception {
    List<MSubmission> submissions;

    submissions = handler.findSubmissionsUnfinished(getDerbyConnection());
    assertNotNull(submissions);
    assertEquals(0, submissions.size());

    loadSubmissions();

    submissions = handler.findSubmissionsUnfinished(getDerbyConnection());
    assertNotNull(submissions);
    assertEquals(2, submissions.size());
  }

  public void testExistsSubmission() throws Exception {
    // There shouldn't be anything on empty repository
    assertFalse(handler.existsSubmission(1, getDerbyConnection()));
    assertFalse(handler.existsSubmission(2, getDerbyConnection()));
    assertFalse(handler.existsSubmission(3, getDerbyConnection()));
    assertFalse(handler.existsSubmission(4, getDerbyConnection()));
    assertFalse(handler.existsSubmission(5, getDerbyConnection()));
    assertFalse(handler.existsSubmission(6, getDerbyConnection()));

    loadSubmissions();

    assertTrue(handler.existsSubmission(1, getDerbyConnection()));
    assertTrue(handler.existsSubmission(2, getDerbyConnection()));
    assertTrue(handler.existsSubmission(3, getDerbyConnection()));
    assertTrue(handler.existsSubmission(4, getDerbyConnection()));
    assertTrue(handler.existsSubmission(5, getDerbyConnection()));
    assertFalse(handler.existsSubmission(6, getDerbyConnection()));
  }

  public void testCreateSubmission() throws Exception {
    Date creationDate = new Date();
    Date updateDate = new Date();

    CounterGroup firstGroup = new CounterGroup("ga");
    CounterGroup secondGroup = new CounterGroup("gb");
    firstGroup.addCounter(new Counter("ca", 100));
    firstGroup.addCounter(new Counter("cb", 200));
    secondGroup.addCounter(new Counter("ca", 300));
    secondGroup.addCounter(new Counter("cd", 400));
    Counters counters = new Counters();
    counters.addCounterGroup(firstGroup);
    counters.addCounterGroup(secondGroup);

    MSubmission submission = new MSubmission();
    submission.setJobId(1);
    submission.setStatus(SubmissionStatus.RUNNING);
    submission.setCreationDate(creationDate);
    submission.setLastUpdateDate(updateDate);
    submission.setExternalId("job-x");
    submission.setExternalLink("http://somewhere");
    submission.setExceptionInfo("RuntimeException");
    submission.setExceptionStackTrace("Yeah it happens");
    submission.setCounters(counters);

    handler.createSubmission(submission, getDerbyConnection());

    assertEquals(1, submission.getPersistenceId());
    assertCountForTable("SQOOP.SQ_SUBMISSION", 1);

    List<MSubmission> submissions =
      handler.findSubmissionsUnfinished(getDerbyConnection());
    assertNotNull(submissions);
    assertEquals(1, submissions.size());

    submission = submissions.get(0);

    assertEquals(1, submission.getJobId());
    assertEquals(SubmissionStatus.RUNNING, submission.getStatus());
    assertEquals(creationDate, submission.getCreationDate());
    assertEquals(updateDate, submission.getLastUpdateDate());
    assertEquals("job-x", submission.getExternalId());
    assertEquals("http://somewhere", submission.getExternalLink());
    assertEquals("RuntimeException", submission.getExceptionInfo());
    assertEquals("Yeah it happens", submission.getExceptionStackTrace());

    CounterGroup group;
    Counter counter;
    Counters retrievedCounters = submission.getCounters();
    assertNotNull(retrievedCounters);

    group = counters.getCounterGroup("ga");
    assertNotNull(group);

    counter = group.getCounter("ca");
    assertNotNull(counter);
    assertEquals(100, counter.getValue());

    counter = group.getCounter("cb");
    assertNotNull(counter);
    assertEquals(200, counter.getValue());

    group = counters.getCounterGroup("gb");
    assertNotNull(group);

    counter = group.getCounter("ca");
    assertNotNull(counter);
    assertEquals(300, counter.getValue());

    counter = group.getCounter("cd");
    assertNotNull(counter);
    assertEquals(400, counter.getValue());

    // Let's create second (simpler) connection
    submission =
      new MSubmission(1, new Date(), SubmissionStatus.SUCCEEDED, "job-x");
    handler.createSubmission(submission, getDerbyConnection());

    assertEquals(2, submission.getPersistenceId());
    assertCountForTable("SQOOP.SQ_SUBMISSION", 2);
  }

  public void testUpdateConnection() throws Exception {
    loadSubmissions();

    List<MSubmission> submissions =
      handler.findSubmissionsUnfinished(getDerbyConnection());
    assertNotNull(submissions);
    assertEquals(2, submissions.size());

    MSubmission submission = submissions.get(0);
    submission.setStatus(SubmissionStatus.SUCCEEDED);

    handler.updateSubmission(submission, getDerbyConnection());

    submissions = handler.findSubmissionsUnfinished(getDerbyConnection());
    assertNotNull(submissions);
    assertEquals(1, submissions.size());
  }

  public void testPurgeSubmissions() throws Exception {
    loadSubmissions();
    List<MSubmission> submissions;

    submissions = handler.findSubmissionsUnfinished(getDerbyConnection());
    assertNotNull(submissions);
    assertEquals(2, submissions.size());
    assertCountForTable("SQOOP.SQ_SUBMISSION", 5);

    Calendar calendar = Calendar.getInstance();
    // 2012-01-03 05:05:05
    calendar.set(2012, Calendar.JANUARY, 3, 5, 5, 5);
    handler.purgeSubmissions(calendar.getTime(), getDerbyConnection());

    submissions = handler.findSubmissionsUnfinished(getDerbyConnection());
    assertNotNull(submissions);
    assertEquals(1, submissions.size());
    assertCountForTable("SQOOP.SQ_SUBMISSION", 2);

    handler.purgeSubmissions(new Date(), getDerbyConnection());

    submissions = handler.findSubmissionsUnfinished(getDerbyConnection());
    assertNotNull(submissions);
    assertEquals(0, submissions.size());
    assertCountForTable("SQOOP.SQ_SUBMISSION", 0);

    handler.purgeSubmissions(new Date(), getDerbyConnection());

    submissions = handler.findSubmissionsUnfinished(getDerbyConnection());
    assertNotNull(submissions);
    assertEquals(0, submissions.size());
    assertCountForTable("SQOOP.SQ_SUBMISSION", 0);
  }

  /**
   * Test that by directly removing jobs we will also remove associated
   * submissions and counters.
   *
   * @throws Exception
   */
  public void testDeleteJobs() throws Exception {
    loadSubmissions();
    assertCountForTable("SQOOP.SQ_SUBMISSION", 5);

    handler.deleteJob(1, getDerbyConnection());
    assertCountForTable("SQOOP.SQ_SUBMISSION", 3);

    handler.deleteJob(2, getDerbyConnection());
    assertCountForTable("SQOOP.SQ_SUBMISSION", 2);

    handler.deleteJob(3, getDerbyConnection());
    assertCountForTable("SQOOP.SQ_SUBMISSION", 1);

    handler.deleteJob(4, getDerbyConnection());
    assertCountForTable("SQOOP.SQ_SUBMISSION", 0);
  }
}
TOP

Related Classes of org.apache.sqoop.repository.derby.TestSubmissionHandling

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.