blob: 70619fcabe564cef256fe6cd41eb2d1d8c99a8f0 [file] [log] [blame]
/*
*
* 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.bookkeeper.bookie;
import static org.junit.Assert.assertEquals;
import java.io.File;
import java.io.IOException;
import java.util.Collection;
import java.util.UUID;
import org.apache.bookkeeper.client.BookKeeperAdmin;
import org.apache.bookkeeper.conf.ServerConfiguration;
import org.apache.bookkeeper.conf.TestBKConfiguration;
import org.apache.bookkeeper.net.BookieId;
import org.apache.bookkeeper.net.BookieSocketAddress;
import org.apache.bookkeeper.test.BookKeeperClusterTestCase;
import org.apache.bookkeeper.util.IOUtils;
import org.apache.bookkeeper.util.PortManager;
import org.junit.Test;
/**
* Tests for when the setAdvertisedAddress is specified.
*/
public class AdvertisedAddressTest extends BookKeeperClusterTestCase {
final int bookiePort = PortManager.nextFreePort();
public AdvertisedAddressTest() {
super(0);
}
private String newDirectory(boolean createCurDir) throws IOException {
File d = IOUtils.createTempDir("cookie", "tmpdir");
if (createCurDir) {
new File(d, "current").mkdirs();
}
tmpDirs.add(d);
return d.getPath();
}
/**
* Test starting bookie with clean state.
*/
@Test
public void testSetAdvertisedAddress() throws Exception {
ServerConfiguration conf = TestBKConfiguration.newServerConfiguration();
conf.setJournalDirName(newDirectory(false))
.setLedgerDirNames(new String[] { newDirectory(false) })
.setBookiePort(bookiePort)
.setMetadataServiceUri(zkUtil.getMetadataServiceUri());
conf.setAdvertisedAddress("10.0.0.1");
assertEquals("10.0.0.1", conf.getAdvertisedAddress());
BookieSocketAddress bkAddress = new BookieSocketAddress("10.0.0.1", bookiePort);
assertEquals(bkAddress, BookieImpl.getBookieAddress(conf));
assertEquals(bkAddress.toBookieId(), BookieImpl.getBookieId(conf));
Bookie b = new BookieImpl(conf);
b.start();
BookKeeperAdmin bka = new BookKeeperAdmin(baseClientConf);
Collection<BookieId> bookies = bka.getAvailableBookies();
assertEquals(1, bookies.size());
BookieId address = bookies.iterator().next();
assertEquals(bkAddress.toBookieId(), address);
b.shutdown();
bka.close();
}
/**
* When advertised address is specified, it should override the use.
*/
@Test
public void testBothUseHostnameAndAdvertisedAddress() throws Exception {
ServerConfiguration conf = new ServerConfiguration().setBookiePort(bookiePort);
conf.setAdvertisedAddress("10.0.0.1");
conf.setUseHostNameAsBookieID(true);
assertEquals("10.0.0.1", conf.getAdvertisedAddress());
BookieSocketAddress bkAddress = new BookieSocketAddress("10.0.0.1", bookiePort);
assertEquals(bkAddress, BookieImpl.getBookieAddress(conf));
assertEquals(bkAddress.toBookieId(), BookieImpl.getBookieId(conf));
}
/**
* Test starting bookie with a bookieId.
*/
@Test
public void testSetBookieId() throws Exception {
String uuid = UUID.randomUUID().toString();
ServerConfiguration conf = TestBKConfiguration.newServerConfiguration();
conf.setJournalDirName(newDirectory(false))
.setLedgerDirNames(new String[] { newDirectory(false) })
.setBookiePort(bookiePort)
.setBookieId(uuid)
.setMetadataServiceUri(zkUtil.getMetadataServiceUri());
conf.setAdvertisedAddress("10.0.0.1");
assertEquals("10.0.0.1", conf.getAdvertisedAddress());
assertEquals(uuid, conf.getBookieId());
BookieSocketAddress bkAddress = new BookieSocketAddress("10.0.0.1", bookiePort);
assertEquals(bkAddress, BookieImpl.getBookieAddress(conf));
assertEquals(uuid, BookieImpl.getBookieId(conf).getId());
Bookie b = new BookieImpl(conf);
b.start();
BookKeeperAdmin bka = new BookKeeperAdmin(baseClientConf);
Collection<BookieId> bookies = bka.getAvailableBookies();
assertEquals(1, bookies.size());
BookieId address = bookies.iterator().next();
assertEquals(BookieId.parse(uuid), address);
b.shutdown();
bka.close();
}
}