001/* 002 * Licensed to the Apache Software Foundation (ASF) under one 003 * or more contributor license agreements. See the NOTICE file 004 * distributed with this work for additional information 005 * regarding copyright ownership. The ASF licenses this file 006 * to you under the Apache License, Version 2.0 (the 007 * "License"); you may not use this file except in compliance 008 * with the License. You may obtain a copy of the License at 009 * 010 * http://www.apache.org/licenses/LICENSE-2.0 011 * 012 * Unless required by applicable law or agreed to in writing, software 013 * distributed under the License is distributed on an "AS IS" BASIS, 014 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 015 * See the License for the specific language governing permissions and 016 * limitations under the License. 017 */ 018package org.apache.hadoop.hbase.rest; 019 020import static org.junit.Assert.assertEquals; 021 022import java.io.IOException; 023import javax.xml.bind.JAXBException; 024import org.apache.hadoop.hbase.HBaseClassTestRule; 025import org.apache.hadoop.hbase.rest.client.Response; 026import org.apache.hadoop.hbase.testclassification.MediumTests; 027import org.apache.hadoop.hbase.testclassification.RestTests; 028import org.junit.ClassRule; 029import org.junit.Test; 030import org.junit.experimental.categories.Category; 031 032@Category({ RestTests.class, MediumTests.class }) 033public class TestDeleteRow extends RowResourceBase { 034 035 @ClassRule 036 public static final HBaseClassTestRule CLASS_RULE = 037 HBaseClassTestRule.forClass(TestDeleteRow.class); 038 039 @Test 040 public void testDeleteNonExistentColumn() throws Exception { 041 Response response = putValueJson(TABLE, ROW_1, COLUMN_1, VALUE_1); 042 assertEquals(200, response.getCode()); 043 044 response = checkAndDeleteJson(TABLE, ROW_1, COLUMN_1, VALUE_2); 045 assertEquals(304, response.getCode()); 046 assertEquals(200, getValueJson(TABLE, ROW_1, COLUMN_1).getCode()); 047 048 response = checkAndDeleteJson(TABLE, ROW_2, COLUMN_1, VALUE_2); 049 assertEquals(304, response.getCode()); 050 assertEquals(200, getValueJson(TABLE, ROW_1, COLUMN_1).getCode()); 051 052 response = checkAndDeleteJson(TABLE, ROW_1, "dummy", VALUE_1); 053 assertEquals(400, response.getCode()); 054 assertEquals(200, getValueJson(TABLE, ROW_1, COLUMN_1).getCode()); 055 056 response = checkAndDeleteJson(TABLE, ROW_1, "dummy:test", VALUE_1); 057 assertEquals(404, response.getCode()); 058 assertEquals(200, getValueJson(TABLE, ROW_1, COLUMN_1).getCode()); 059 060 response = checkAndDeleteJson(TABLE, ROW_1, "a:test", VALUE_1); 061 assertEquals(304, response.getCode()); 062 assertEquals(200, getValueJson(TABLE, ROW_1, COLUMN_1).getCode()); 063 } 064 065 @Test 066 public void testDeleteXML() throws IOException, JAXBException { 067 Response response = putValueXML(TABLE, ROW_1, COLUMN_1, VALUE_1); 068 assertEquals(200, response.getCode()); 069 response = putValueXML(TABLE, ROW_1, COLUMN_2, VALUE_2); 070 assertEquals(200, response.getCode()); 071 checkValueXML(TABLE, ROW_1, COLUMN_1, VALUE_1); 072 checkValueXML(TABLE, ROW_1, COLUMN_2, VALUE_2); 073 074 response = deleteValue(TABLE, ROW_1, COLUMN_1); 075 assertEquals(200, response.getCode()); 076 response = getValueXML(TABLE, ROW_1, COLUMN_1); 077 assertEquals(404, response.getCode()); 078 checkValueXML(TABLE, ROW_1, COLUMN_2, VALUE_2); 079 080 response = putValueXML(TABLE, ROW_1, COLUMN_1, VALUE_1); 081 assertEquals(200, response.getCode()); 082 response = checkAndDeletePB(TABLE, ROW_1, COLUMN_1, VALUE_1); 083 assertEquals(200, response.getCode()); 084 response = getValueXML(TABLE, ROW_1, COLUMN_1); 085 assertEquals(404, response.getCode()); 086 087 response = deleteRow(TABLE, ROW_1); 088 assertEquals(200, response.getCode()); 089 response = getValueXML(TABLE, ROW_1, COLUMN_1); 090 assertEquals(404, response.getCode()); 091 response = getValueXML(TABLE, ROW_1, COLUMN_2); 092 assertEquals(404, response.getCode()); 093 094 // Delete a row in non existent table 095 response = deleteValue("dummy", ROW_1, COLUMN_1); 096 assertEquals(404, response.getCode()); 097 098 // Delete non existent column 099 response = deleteValue(TABLE, ROW_1, "dummy"); 100 assertEquals(404, response.getCode()); 101 } 102 103 private void testDeleteB64XML(boolean useQueryString) throws IOException, JAXBException { 104 Response response = putValueXML(TABLE, ROW_1, COLUMN_1, VALUE_1); 105 assertEquals(200, response.getCode()); 106 response = putValueXML(TABLE, ROW_1, COLUMN_2, VALUE_2); 107 assertEquals(200, response.getCode()); 108 checkValueXML(TABLE, ROW_1, COLUMN_1, VALUE_1); 109 checkValueXML(TABLE, ROW_1, COLUMN_2, VALUE_2); 110 111 response = deleteValueB64(TABLE, ROW_1, COLUMN_1, useQueryString); 112 assertEquals(200, response.getCode()); 113 response = getValueXML(TABLE, ROW_1, COLUMN_1); 114 assertEquals(404, response.getCode()); 115 checkValueXML(TABLE, ROW_1, COLUMN_2, VALUE_2); 116 117 response = putValueXML(TABLE, ROW_1, COLUMN_1, VALUE_1); 118 assertEquals(200, response.getCode()); 119 response = checkAndDeletePB(TABLE, ROW_1, COLUMN_1, VALUE_1); 120 assertEquals(200, response.getCode()); 121 response = getValueXML(TABLE, ROW_1, COLUMN_1); 122 assertEquals(404, response.getCode()); 123 124 response = deleteRowB64(TABLE, ROW_1, useQueryString); 125 assertEquals(200, response.getCode()); 126 response = getValueXML(TABLE, ROW_1, COLUMN_1); 127 assertEquals(404, response.getCode()); 128 response = getValueXML(TABLE, ROW_1, COLUMN_2); 129 assertEquals(404, response.getCode()); 130 } 131 132 @Test 133 public void testDeleteB64XML() throws IOException, JAXBException { 134 testDeleteB64XML(/* useQueryString: */false); 135 testDeleteB64XML(/* useQueryString: */true); 136 } 137}