blob: 7d9f576c2204cba3fa63b79414a6f1b3c02582b0 [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.submarine.server.submitter.k8s;
import io.kubernetes.client.openapi.models.V1EnvVar;
import io.kubernetes.client.openapi.models.V1ObjectMeta;
import org.apache.submarine.commons.utils.SubmarineConfiguration;
import org.apache.submarine.server.api.environment.Environment;
import org.apache.submarine.server.api.spec.NotebookMeta;
import org.apache.submarine.server.api.spec.NotebookPodSpec;
import org.apache.submarine.server.api.spec.NotebookSpec;
import org.apache.submarine.server.submitter.k8s.model.common.Configmap;
import org.apache.submarine.server.submitter.k8s.model.notebook.NotebookCR;
import org.apache.submarine.server.submitter.k8s.model.notebook.NotebookCRSpec;
import org.apache.submarine.server.submitter.k8s.parser.NotebookSpecParser;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import java.io.IOException;
import java.net.URISyntaxException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Map;
public class NotebookSpecParserTest extends SpecBuilder {
private static final SubmarineConfiguration conf = SubmarineConfiguration.getInstance();
@Before
public void beforeInit() {
conf.setJdbcUrl(H2_JDBC_URL);
conf.setJdbcDriverClassName(H2_JDBC_DRIVERCLASS);
conf.setJdbcUserName(H2_JDBC_USERNAME);
conf.setJdbcPassword(H2_JDBC_PASSWORD);
try (Connection conn = DriverManager.getConnection(H2_JDBC_URL,
H2_JDBC_USERNAME, H2_JDBC_PASSWORD);
Statement stmt = conn.createStatement()) {
stmt.execute("RUNSCRIPT FROM 'classpath:/db/notebook.sql'");
} catch (SQLException e) {
e.printStackTrace();
}
}
@Test
public void testValidNotebook() throws IOException, URISyntaxException {
NotebookSpec notebookSpec = (NotebookSpec) buildFromJsonFile(NotebookSpec.class, notebookReqFile);
NotebookCR notebook = new NotebookCR(notebookSpec, "notebook_1642402491519_0003", "default");
validateMetadata(notebookSpec.getMeta(), notebook.getMetadata());
validateEnvironment(notebookSpec, notebook.getSpec());
validatePodSpec(notebookSpec.getSpec(), notebook);
}
private void validateMetadata(NotebookMeta meta, V1ObjectMeta actualMeta) {
Assert.assertEquals("notebook-1642402491519-0003-my-nb", actualMeta.getName());
Assert.assertEquals(meta.getNamespace(), actualMeta.getNamespace());
Assert.assertEquals(meta.getOwnerId(),
actualMeta.getLabels().get(NotebookCR.NOTEBOOK_OWNER_SELECTOR_KEY));
}
private void validateEnvironment(NotebookSpec spec, NotebookCRSpec actualPodSpec) {
Environment env = NotebookSpecParser.getEnvironment(spec);
String expectedImage = env.getEnvironmentSpec().getDockerImage();
String actualImage = actualPodSpec.getContainerImageName();
Assert.assertEquals(expectedImage, actualImage);
}
private void validatePodSpec(NotebookPodSpec podSpec, NotebookCR notebook) {
NotebookCRSpec notebookCRSpec = null;
if (notebook != null) {
notebookCRSpec = notebook.getSpec();
}
Assert.assertNotNull(notebookCRSpec);
// environment variable
for (Map.Entry<String, String> entry : podSpec.getEnvVars().entrySet()) {
V1EnvVar env = new V1EnvVar();
env.setName(entry.getKey());
env.setValue(entry.getValue());
Assert.assertTrue(notebook.getSpec().getEnvs().contains(env));
}
// mem
String expectedContainerMem = podSpec.getMemory();
String actualContainerMem = notebookCRSpec.getContainerMemory();
Assert.assertEquals(expectedContainerMem, actualContainerMem);
// cpu
String expectedContainerCpu = podSpec.getCpu();
String actualContainerCpu = notebookCRSpec.getContainerCpu();
Assert.assertEquals(expectedContainerCpu, actualContainerCpu);
}
@Test
public void testConfigMap() {
String overwriteJson = "{ \"@jupyterlab/translation-extension:plugin\": " +
"{ \"locale\": \"zh_CN\" } }";
Configmap configMap = new Configmap("default", "test",
"overwrite.json", overwriteJson);
Map<String, String> data = configMap.getData();
Assert.assertEquals(data.size(), 1);
Assert.assertEquals(data.get("overwrite.json"), overwriteJson);
Configmap configMap2 = new Configmap("default", "test", data);
Map<String, String> data2 = configMap2.getData();
Assert.assertEquals(data2.size(), 1);
Assert.assertEquals(data2.get("overwrite.json"), overwriteJson);
}
}